将SIGTERM发送到JVM是否安全

时间:2014-07-14 01:52:20

标签: java scala jvm signals shutdown-hook

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

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

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

1 个答案:

答案 0 :(得分:1)

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