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 命令。

<

最低0.47元/天 解锁文章
1319

被折叠的 条评论
为什么被折叠?



