如何调试导致 Helidon 服务器突然关闭的 SIGTERM

How to Debug a SIGTERM that Causes Abrupt Helidon Server Shutdown

提问人:Nathan 提问时间:9/8/2023 更新时间:9/8/2023 访问量:39

问:

一个简单的 Java 程序捕获并启动 JVM 关闭钩子(即 )。当钩子完成时,JVM 将干净地关闭。kill -SIGTERMRuntime.addShutdownHook()

一个简单的 Helidon 服务器有一个 JVM 关闭钩子,以确保干净地关闭。Netty停止倾听。我有 、 和 JVM 关闭钩子,它们只是记录一条消息。钩子记录并完成。服务器和 JVM 完全关闭。CDI@BeforeDestroyed@Destroyed

我有一个更复杂的 Helidon 服务器。我有监视特殊删除文件的代码。当我创建删除文件时,代码会检测到该文件并启动关闭。我看到来自 Netty、 、 和 JVM 关闭钩子的日志消息。服务器和 JVM 完全关闭。关机需要 1.011 秒。@BeforeDestroyed@Destroyed

当我发送到复杂的 Helidon 服务器时,服务器突然停止。Netty 不会关闭。不调用钩子。服务器将在几毫秒内退出。kill -SIGTERM

如何调试服务器突然退出的原因?什么可能导致服务器在收到 ?SIGTERM

我可以在 Windows(使用 Cygwin 的杀戮)和 Linux 上重现这个问题。

java 退出 sigterm shutdown-hook

评论

0赞 Kayaman 9/8/2023
好吧,它不应该在不运行关闭钩子的情况下在 SIGTERM 上完成。也许钩子中有什么东西会导致问题?不知道一些本机调试器是否可能有助于获取更多信息,或者查看操作系统日志以查看是否有关于它的内容。
0赞 Nathan 9/8/2023
@Kayaman同意了。SIGTERM 告诉进程启动关闭程序。不幸的是,某些东西杀死了该过程,而不是让关闭过程开始。我已经很久没有使用本机调试器了。这似乎令人生畏,因为我认为我需要构建一个 JVM。我不确定要查看哪个 Windows 或 Linux 日志文件。
0赞 tgdavies 9/8/2023
当使用 SIGTERM 停止时,复杂服务器的退出代码是什么?
1赞 tgdavies 9/8/2023
您可以在调试器下运行复杂的服务器,并在其中放置一个断点,以防万一有人调用它。Runtime.halt
0赞 Nathan 9/11/2023
@tgdavies 退出代码为 143。我在 Runtime.halt() 和 java.lang.Shutdown.halt() 上放置了一个断点。他们都没有被击中。我把断点留在那里,然后运行另一个程序。两个断点都命中。

答: 暂无答案