java - Tomcat突然死了

标签 java tomcat crash jvm

尝试在 64 位 linux (CentOS) 机器上诊断一些奇怪的 Tomcat (7.0.21) 和/或 JVM 错误。

我正在对我们的服务器应用程序进行负载测试,并尝试用 10 万条消息对其进行测试。启动 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 和 respect localhost_access_* 文件在没有任何信息的情况下停止

我听说可以让 Tomcat 在记录核心转储时记录它,但不确定如何做到这一点,在线示例也没有太大帮助。

SO 将如何进行诊断?我应该采取什么步骤来开始排除所有可能的因素?

提前致谢!

最佳答案

如果 JVM 崩溃,你应该有一个 hs_err_pidNNN.log 文件;您无需执行任何操作即可启用此功能。它的位置取决于您的操作系统以及您运行 Tomcat 的方式。在 Windows 上,它们可以显示在您的桌面上,除非您作为服务运行。否则,它们应该位于崩溃进程的当前工作目录中。

您的操作系统可能提供了额外的进程监控工具;你可以更多地描述你的环境,或者问serverfault.com .

也有可能 jvisualvm 实际上导致了崩溃。

我会尝试重现问题,并逐步简化场景以帮助找出原因。

关于java - Tomcat突然死了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132496/

相关文章:

java - Spring 国际奥委会 : What about serialization?

java - 结果集不给出值(不进入 while 循环)

spring-boot - 如何使 session 长度持续更长的时间?

android - 当我尝试实现滚动条时,我的应用程序崩溃了

java 提取数组中字符串中的第二个单词

java - 如何将时间转换为毫秒?

java - 错误 : "javax.servlet.ServletException: Failed to load test suite [SampleTest], Reason is [Class not found "SampleTest"] "

java - 无法使用 -Dcom.sun.management.jmxremote.authenticate=true 启动 Tomcat

ios - 通知中心在模拟器上导致 EXC_BAD_ACCESS 的原因是什么,但在设备上却没有?

android - Android进程崩溃时如何创建崩溃日志