扫盲 JVM 安全退出机制:shutdownHook,signalHandler

1. 背景

线上跑的 Java 服务,总有退出的时候,而且还很频繁(想想每天服务发布多少次吧,每次发布 JVM 都会退出再重启或者干脆换一台机器启动)。

那么思考下,如果 JVM 退出的时候,有以下问题怎么办:

  • 这个时候如果还有在执行中的异步任务,这些任务怎么办?
  • 正在写文件呢,写到一半 JVM 退出了,会导致文件损坏或不完整
  • 缓存中的数据尚未持久化到磁盘中,导致数据丢失
  • ... ...

如果有这些问题,就要考虑 JVM 安全退出了:在JVM 退出的时候做一些善后工作。

关键字:JVM 安全退出;shutdownHook;signalHandler

2. JVM 安全退出场景

JVM 退出有三类场景,如下:

这三类场景中,正常关闭和异常关闭,JVM 可以感知。可以通过 ShutdownHook 或者 SignalHandler 做一些善后工作。

强制关闭 JVM 则感知不到,无法做善后的工作,退出后会造成哪些影响都很难预估,所以我们日常不推荐使用 kill -9 来关闭程序。

3. kill 命令

先了解下 JVM 退出的命令。

服务发布到线上后,肯定没有 IDEA 的关闭按钮给我们用,让我们关闭程序。所以都是通过 kill 命令来关闭 JVM 进程的。

所以我们先了解下 kill 命令。

<

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值