java - 将 SIGTERM 发送到 JVM 是否安全

标签 java scala jvm signals shutdown-hook

尽管 JVM 会 translate SIGTERM and similar signals to shutdown hooks , 许多服务关闭脚本使用 TCP 端口来启动关闭。 (例如Tomcat的关闭端口、Java Service Wrapper、JBoss的管理接口(interface)等)

所以我认为不鼓励使用信号和关闭 Hook 来优雅地关闭 java 服务,直到我发现 Play! framework is managing the service lifecycle with shutdown hooks并且 play dist 生成的启动脚本假定信号将发送到 JVM 的 PID。

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

最佳答案

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

关于java - 将 SIGTERM 发送到 JVM 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728586/

相关文章:

java - 为什么使用 FilterOutputStream 拦截 FileInputStream 到 FileOutputStream 的传输要慢几个数量级?

scala - Apache Spark 中的 shuffle read 和 shuffle write 是什么

java - 以尽可能少的线程初始化 JVM

jvm - klassoop 和 instanceklass 之间的真正区别是什么?

arrays - 我们可以改进我的代码以在 Scala 中交换相邻的数组元素吗?

java - 每个 Java 应用程序是否有一个 JVM?

java - GUI 中的 ActionListener。功能不起作用

java - 如何让用户选择一个音频文件并用 Java 播放它

java - ImageJ:获取特定的Radiobox

scala - 如何解决 SBT 中冲突的跨版本后缀?