尝试在64位Linux(CentOS)计算机上诊断一些奇怪的Tomcat(7.0.21
)和/或JVM错误。
我正在加载测试我们的服务器应用程序并尝试用100K消息进行测试。推出jvisualvm
并始终关注堆。一切都看起来很棒*(见下文),直到我得到大约93K处理过的消息,然后Tomcat就死了。在Tomcat的PID编号上找ps
确认它已经死了。
直到崩溃:
MAX_HEAP
服务器代码中没有任何地方调用System.exit()
- 所以我们可以直接判断(是的,我已经仔细检查了!!!)。
我不确定这是Tomcat崩溃还是JVM(我怎么说?)。即使我知道,我似乎也找不到出错的迹象:
catalina.out
和尊重localhost_access_*
文件只是停止而没有任何信息我听说有可能让Tomcat在执行时记录一个coredump,但不知道如何做到这一点,并且在线示例没有多大帮助。
如何诊断这个?我应该采取哪些步骤来排除所有可能的因素?
提前致谢!
答案 0 :(得分:14)
如果JVM崩溃,你应该有一个hs_err_pidNNN.log文件;您无需执行任何操作即可启用此功能。它的位置取决于您的操作系统以及您运行Tomcat的方式。在Windows上,除非您作为服务运行,否则它们可以显示在您的桌面上。否则,它们应该在崩溃进程的当前工作目录中。
您的操作系统可能提供了额外的过程监控工具;您可以更多地描述您的环境,或者可以在serverfault.com询问。
jvisualvm
实际上也可能导致崩溃。
我会尝试重现这个问题,并逐步简化方案,以帮助找出原因。
答案 1 :(得分:6)
另一种可能性是操作系统内存不足而OOM Killer正在终止你的进程。在这种情况下,JVM将无法编写堆转储或hs_err_pid文件。
答案 2 :(得分:4)
您可以使用选项java -XX:+ HeapDumpOnOutOfMemoryError为因内存不足错误而导致的jvm崩溃创建堆转储。
此处有更多详情Using HeapDumpOnOutOfMemoryError parameter for heap dump for JBoss。
答案 3 :(得分:1)
抱歉,我不得不从@erickson中删除绿色支票。我终于找到了杀死Tomcat的原因。
看起来好像没有使用VisualVM正确配置探查器插件,并且尝试在Tomcat进程上运行配置文件会将其终止。
立即调查原因,并在我了解更多后更新此答案。