【发布时间】:2012-02-26 07:08:57
【问题描述】:
尝试在 64 位 linux (CentOS) 机器上诊断一些奇怪的 Tomcat (7.0.21) 和/或 JVM 错误。
我正在对我们的服务器应用程序进行负载测试,并尝试使用 100K 消息对其进行处理。启动jvisualvm 并一直关注堆。一切看起来都很棒*(见下文),直到我处理了大约 93K 条消息,然后 Tomcat 就死了。在 Tomcat 的 PID 号上运行 ps 以确认它已死。
直到这次崩溃:
- 负载测试已经运行了大约 90 分钟;应该很快就完成了,因为我们是 93K/100K)
- CPU 在 45% 左右保持强劲
- 已用堆约为 2GB(在 GC 后加上或减去一堆),但堆大小在大约 30 分钟后从 4GB 增长到
MAX_HEAP - 类加载/卸载正常循环
- 线程转储正常
服务器代码中没有任何对 System.exit() 的调用 - 所以我们可以排除这种情况(是的,我已经仔细检查了!!!)。
我不确定这是 Tomcat 崩溃还是 JVM 崩溃(我怎么知道?)。即使我知道,我似乎也找不到任何迹象表明出了什么问题:
- 所有服务器应用程序的日志都会停止,没有任何错误消息(即使我们已将日志记录普遍设置为 DEBUG 或更高版本)
- Tomcat 的
catalina.out和尊重localhost_access_*文件在没有任何信息的情况下停止
我听说可以让 Tomcat 记录核心转储,但不知道如何做到这一点,并且在线示例没有多大帮助。
SO 将如何诊断?我应该采取哪些步骤来开始排除所有可能的因素?
提前致谢!
【问题讨论】:
-
是薛定谔的tomcat吗?
-
仅供参考,根据我的经验,您可以判断 tomcat 是否被 OOM Killer 杀死,因为“Killed”这个词会出现在接近 catalina.out 末尾的某个地方。
-
尝试将交换文件添加到您的系统。它不必很大。 superuser.com/questions/1445510/…