目录

  • linux常用的 kill 指令
  • springboot 优雅停机
  • /actuator/shutdown 端点
  • 不停机更新方案

linux常用的 kill 指令

  • kill -15:kill指令默认就是-15,只是发送一个 SIGTERM 信号通知进程终止,由进程自行决定怎么做,即进程不一定会终止。
  • kill -9:强制终止进程,进程会被立刻终止
  • kill -2:类似 Ctrl+C 退出,会先保存相关数据再终止进程。

一般不直接使用 kill -15,因为不一定能终止进程。

kill -9 过于暴力,往往会出现事务执行、业务处理中断的情况,导致数据库中存在脏数据、系统中存在残留文件等情况。如果要用kill -9,尽量先使用 kill -15 给进程一个处理善后的机会。

kill -2 稍微温和一些,立刻终止正在执行的代码 -> 保存数据 -> 终止进程,只是在进程终止之前会先保存相关数据,依然会出现事务执行、业务处理中断的情况,做不到优雅停机。

springboot 优雅停机

优雅停机是springboot的特性之一,在收到终止信号后,不再接受、处理新请求,但会在终止进程之前预留一小段缓冲时间,以完成正在处理的请求。

需要注意的是,优雅停机需要 tomcat 的 9.0.33 及其之后的版本才支持

Graceful shutdown with Tomcat requires Tomcat 9.0.33 or later.

springboot内置的tomcat版本都比较高,一般是满足的。

yml

server:#启用优雅停机。graceful 优雅、优美。默认为 immediate 立刻终止shutdown: gracefulspring:lifecycle:##设置优雅停机的缓冲时间timeout-per-shutdown-phase: 30s

缓冲时间用完了,不管请求有没有执行完毕,都会终止进程。

终止进程使用 kill -2。

不能使用kill -9,使用kill -9会立刻杀死进程,优雅停机不会起作用。

对应的日志如下

#正在执行方法#收到 kill -2 的终止信号,开始优雅停机,不再接受新请求,等待正在处理的请求执行完毕
2021-10-20 15:46:46.880  INFO 13988 --- [extShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown        : Commencing graceful shutdown. Waiting for active requests to complete#继续处理尚未处理完毕的请求#缓冲时间已到,优雅停机结束,终止进程
2021-10-20 15:46:59.562  INFO 13988 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown        : Graceful shutdown complete
2021-10-20 15:46:59.594  INFO 13988 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

/actuator/shutdown 端点

如果集成了 actuator,可以用 /actuator/shutdown 端点来代替 kill -2 关闭应用。

生产环境禁止暴露 /actuator/shutdown 这种高风险端点,谁都可以发一个POST请求来关闭我们服务器上的应用,那还了得。springboot默认也没有启用 /actuator/shutdown 端点,这种方式一般不用,此处只是简单介绍一下。

yml

management:#暴露actuator的全部全部端点endpoints:web:exposure:include: "*"#启用shutdown端点,默认false    endpoint:shutdown:enabled: true

POST 请求 /actuator/shutdown 端点即可关闭应用,作用和 kill -2 相同,也可以实现优雅停机。

不停机更新方案

这里说的不停机,是指不停止对外服务,并非不停止应用|web容器。

公司有钱的话,可以部署2套生产环境,更新时先切换到另一套环境,更新完毕再切回来。

SpringBoot 优雅停机相关推荐

  1. springboot优雅停机

    项目版本迭代难免需要重启应用,比较粗暴的方法是kill -9 pid,这种方式是直接通过操作系统命令杀死进程,用户未完成的请求也会被丢失掉,尤其是我们的应用中有队列任务的,要是队列中的任务没有持久化, ...

  2. springboot 优雅停机_SpringBoot 优雅停止服务的几种方法 第309篇

    相关历史文章(阅读本文之前,您可能需要先看下之前的系列?) 国内最全的Spring Boot系列之三 一分钟get:缓存穿透.缓存击穿.缓存雪崩 - 第304篇 布隆过滤器Bloom Filter竟然 ...

  3. springboot 优雅停机_Spring boot 2.3优雅下线,距离生产还有多远?

    简介:对于任何一个线上应用,如何在服务更新部署过程中保证业务无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求,这使得无损下线成为应用生命周期中必不可少的一个环节 ...

  4. 结合JUC谈Springboot优雅停机

    废话少说 springboot的优雅停机是借助于ShutdownHook回调实现的(网上文章都说烂了). 在执行hook流程时,spring借助CountDownLatch阻塞线程达到在一定时间内不退 ...

  5. springboot 优雅停机_Spring Boot 2.3 新特性优雅停机详解

    什么是优雅停机 先来一段简单的代码,如下: @RestControllerpublic class DemoController { @GetMapping("/demo") pu ...

  6. springboot 优雅停机_新姿势,Spring Boot 2.3.0 如何优雅停机?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/mu22If 先来一段简单的代码,如下: @RestControllerpub ...

  7. SpringBoot在K8s下实现优雅停机

    在K8s中,当我们实现滚动升级之前,务必要实现应用级别的优雅停机.否则滚动升级时,还是会影响到业务.本文介绍SpringBoot应用实现优雅停机.此次教程基于SpringBoot 2.5.0. 1. ...

  8. spring 优雅停机

    为什么 spring 要做优雅停机 我们现在的服务一般都是在 spring 容器运行,如果不做优雅停机,会有以下问题 1.程序中的任务运行到一半,被强行结束,影响到正常业务 2.出现 spring 容 ...

  9. SpringBoot 2.3 新特性之优雅停机

    1 SpringBoot 2.3 新特性之优雅停机 什么是优雅停机 先来一段简单的代码,如下: @RestController public class DemoController {@GetMap ...

最新文章

  1. 页面布局让footer居页面底部_网站各页面该如何布局关键词优化提升排名?
  2. python自学步骤-怎么自学python,大概要多久?
  3. 阿里P7/P8学习路线图——技术封神之路
  4. 电脑连接电视方法详解_HDMI高清线如何连接电脑与电视,简单安装步骤,真是太有用了...
  5. 《系统集成项目管理工程师》必背100个知识点-93国家信息化体系六要素
  6. 【Python实现网络爬虫】Scrapy爬取网易新闻(仅供学习交流使用!)
  7. scrapy同时运行多个spider
  8. Tomcat Instance in Eclipse and in local folder
  9. 又拍云php表单,又拍云的表单api提交
  10. 选择FreeBSD的理由?欢迎新人观看^_^
  11. Hadoop之mapReduce有几种排序及排序发生的阶段
  12. FPGA开发设计流程
  13. 478.在圆内随机生成点
  14. DSP28335定时器简易秒表设计
  15. 绝情且残酷!1780元暴力解聘患癌10年老员工,完美世界心真“硬”
  16. 异常检测 | 用于无监督异常检测的自监督学习适应性记忆网络
  17. css+js简单实现126邮箱注册页面
  18. 大一学计算机心得,大一计算机学习心得范文
  19. 华为畅享20plus支持鸿蒙系统吗,华为畅享20 plus有nfc吗?畅享20 plus支持红外功能吗?...
  20. @ConditionOnBean注解的先后顺序对结果的影响

热门文章

  1. 集装箱号识别率99.98%+实时返回结果高泛化,全球领先飞瞳引擎集装箱识别检测云服务全球三千企业用户,集装箱信息识别铅封识别免费
  2. docker实现原理总结
  3. CPU 主频,核数 参数解读 物理CPU,逻辑CPU,物理核 概念辨析
  4. 修改数据库表结构(SQLserver)
  5. 离散数学与组合数学-数理逻辑-01命题与联结词
  6. 毕业设计-基于深度学习的人脸识别方法
  7. 跟着团子学SAP PS:项目中的固定资产折旧/零购固定资产 ACSET
  8. 理解图卷积网络的节点分类
  9. tecplot改变坐标轴范围
  10. 微软 Sql Server 2008