7

尽管 JVM 会将SIGTERM 和类似信号转换为关闭挂钩,但许多服务关闭脚本使用 TCP 端口来启动关闭。(例如Tomcat的关闭端口、Java Service Wrapper、JBoss的管理接口等)

所以我认为不鼓励使用信号和关闭挂钩来优雅地关闭 java 服务,直到我发现Play! 框架使用关闭钩子管理服务生命周期,并且生成的启动脚本play dist假定信号将被发送到 JVM 的 PID。

我知道信号是依赖于平台的,使用 TCP 端口是一种以跨平台方式管理服务的简单且可扩展的方式,但我想知道它的安全性以及当我依赖时需要考虑哪些风险将 SIGTERM 和关闭挂钩作为服务关闭的主要方法。

4

1 回答 1

2

只要 Java 服务明智地使用 ShutdownHooks 进行有序终止,向 JVM 进程发送 SIGTERM 就没有问题。例如,我们使用 SIGTERM 作为在我们的大型高负载生产系统(运行 80 个不同 Java 应用程序的 5000 多台服务器)中启动应用程序关闭的主要方法。

于 2014-07-14T11:49:40.783 回答