翻译官网

springboot内置四种web server(Jetty, Reactor Netty, Tomcat, and Undertow) 以及响应式和基于servlet的web应用全部支持优雅的shutdown,作为停止application上下文的一部分,并且在停止SmartLifecycle beans的早期阶段停止。停止进程会有一个超时时间,在这段时间内已经存在的请求将会被允许完成,但是新请求是不允许的。新请求不被允许的确切方式取决于web server的用法。

tomcat9.0.33及以后得版本支持graceful shutdown

配置graceful shutdown,通过server.shutdown,配置如下:

  • yaml
server:
  shutdown: "graceful"
  • properties
server.shutdown=graceful

配置超时时间,通过spring.lifecycle.timeout-per-shutdown-phase属性,配置如下:

  • yaml
spring:
  lifecycle:
    timeout-per-shutdown-phase: "20s"
  • properties
spring.lifecycle.timeout-per-shutdown-phase=20s

如果你的IDE没有发送正确的SIGTERM信号,graceful shutdown可能没法正常使用,请参考IDE文档了解更多详细信息。

实践

通常我们使用kill -9 pid来结束java进程,但是想要graceful shutdown应用时,就不能再暴力的使用kill -9来结束进程了,除了在配置文件中打开配置还需要使用kill -2 pid来给应用发送中断信号。

拓展
linux中kill的信号量
kill -9 强制中断进程
kill -2 类似于ctrl+c,等程序执行完毕,结束进程

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐