将SIGTERM发送到JVM是否安全

lyo*_*omi 7 java jvm signals scala shutdown-hook

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

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

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

apa*_*gin 2

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