red*_*tom 5 java rhel jenkins java-8 rhel6
我有一个在 RHEL 6.10 上运行的 Java8 应用程序。此应用程序通过常用方法注册关闭处理程序:
Thread shutdownThread = new Thread(()=>{
Logger.info("Got shutdown signal");
// Do cleanup
});
Runtime.getRuntime().addShutdownHook(shutdownThread);
Run Code Online (Sandbox Code Playgroud)
此应用程序由 Jenkins 构建启动(环境BUILD_ID
变量设置为dontkillme
)。应用程序初始化成功,但大约 30 秒后调用关闭挂钩并终止应用程序。我试图弄清楚是谁让我关闭以及为什么。我已经进行了监控top
,它在运行时似乎没有出现内存问题,所以我不认为 OOM 杀手是罪魁祸首。我也看了看/var/log/dmesg
和/var/log/messages
不看相关的有什么无论是。我不认为 Jenkins 会杀死我,因为我设置了BUILD_ID
,也因为应用程序在“父”Jenkins 作业仍在运行时死亡。
我可以使用哪些其他方法/工具来查看发生了什么?请注意,我的环境非常封闭,因此很难从 Internet 下载和运行某些内容,希望我可以使用标准 RHEL6 安装中的某些内容。
事实证明,答案对于相关应用程序来说是唯一的。该应用程序使用zookeeper-3.5.5库连接到Zookeeper实例。该客户端库在运行时依赖于 Zookeeper-jute jar,当执行目录中不存在该 jar 时,就会出现此问题。
您可能想知道为什么应用程序默默地关闭自己并且没有抛出 ClassNotFoundException ,这可以帮助我调试它。好问题!我不知道。