java 服务器进程未完全退出

java server process not exiting cleanly

我有一个 init.d 脚本,它 starts/stops 一个基于 jruby 的服务器 运行 在 java 8 上。有一段时间它会回落到 kill -9。我可以从我的日志中看到 kill 触发了正确的关闭挂钩并最终调用了 System.exit(0)。此时进程应该结束,但它没有。

我实际上已经在我的 init.d 脚本中使用一个循环轮询了该进程是否仍然存在(是)并尝试使用 kill -QUIT 使其记录一个线程转储。后者在几秒钟后停止工作,但进程一直僵尸化,直到我 kill -9 它。

我的问题:如何确定是什么原因造成的?至少线程转储会告诉我我的代码的哪一部分正在阻塞,但它似乎处于不再有效但进程不会退出的状态。

Joe 使用 Runtime.getRuntime().halt(int) 的建议有效。谢谢