温柔关闭springboot

1、原来的脚本备份

惯常做法是kill -9 ,暴力完成,干净利索。
但是还是有很多请求已经进来了,没有完成就game over了,这部分数据就丢失了,那些事务啊,一致性啊,费那么多劲头,一个kill -9 都完蛋了。
所以一般会到夜里没有请求的时候才开天窗,福报比较多,就是容易上火。

具体脚本就是

  • bank 备份jar包

  • shutdown 脚本
#!/bin/bash
ps aux|grep 项目名称.jar|grep -v grep | awk '{print $2}'|xargs kill -9
  • start 脚本
#!/bin/bash
java -jar 项目名称.jar -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m   --spring.profiles.active=prod &
  • restart 脚本
#!/bin/bash
ps aux|grep 项目名称.jar|grep -v grep | awk '{print $2}'|xargs kill -9
java -jar 项目名称.jar -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m   --spring.profiles.active=prod &

2、太暴力,还是温柔一点

简而言之,优雅关闭就是

  • 不接受新任务(增量)
    • euraka、网关不再给改服务分配任务
  • 等待现有任务处理完(存量)
    • 线程池跑完
    • socket、mq、netty关闭端口
    • 临时资源(流,图片)、堆内外内存等释放

目前集中优雅停机的方案

tomcat单体应用

说实话来目前公司之前,没想到还有这么多单体应用坚强的运行着,jboss,weblogic 啥的项目,数据库连接池还是好多年前的那一套,总而言之,这些项目不使用kill -9 ,也不在我检视范围之内

springboot

1、关闭服务不使用kill -9 pid,而是用kill-15 pid
2、spring-boot-starter-actuator提供一个restful接口,可以用于停机

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

但是要注意权限问题

执行curl -X POST host:port/shutdown命令

3、springboot 2.3.+自带优雅停机功能
springboot>2.3.0
tomcat>=9.0.33
需要配置server.shutdown=graceful
还可设置缓冲参数,timeout-per-shutdown-phase 默认30s

4、容器化部署
首先可以销毁容器钱静置30s的方法
其次还是接入spring-boot-starter-actuator,提供metrice权限,方便k8s探活
关闭时候,也通过curl -X POST host:port/shutdownml

还有一种办法,走igress分发的请求,也可以提前静置30s,等线程跑完

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值