Tomcat突然停止运行

18

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

我正在对服务器应用程序进行负载测试,并尝试使用100K个消息来击中它。启动了jvisualvm,并一直关注堆。一切看起来都很好*(见下文),直到处理了大约93K条消息,然后Tomcat就崩溃了。运行了ps以确认Tomcat已停止。

在此崩溃之前:

  • 负载测试已运行约90分钟;由于我们已经处理了93K / 100K,因此应该很快完成
  • CPU保持在45%左右
  • 使用的堆大小约为2GB(在GC后加减少),但堆大小在30分钟后从4GB增长到MAX_HEAP
  • 类加载/卸载正常循环
  • 线程转储正常

在服务器代码中根本没有调用System.exit() - 因此我们可以排除这个原因(是的,我已经仔细检查过了!)。

我不确定这是Tomcat崩溃还是JVM(我该如何判断?)。即使我知道了,我似乎也找不到任何有关发生了什么事情的迹象:

  • 所有服务器应用程序的日志都停止而不显示任何错误消息(即使我们将日志普遍设置为DEBUG或更高)
  • Tomcat的catalina.out和相应的localhost_access_*文件也停止了,没有任何信息

我听说在Tomcat崩溃时记录核心转储是可能的,但不确定如何做到这一点,而在线示例也没有什么帮助。

StackOverflow会如何诊断此问题?我应该采取哪些步骤来开始排除所有可能的因素?

提前致谢!


15
这是“薛定谔的猫”吗? - erickson
你检查更多的日志了吗?http://stackoverflow.com/questions/1575730/debugging-tomcat-crash - josh.trow
据我的经验,如果Tomcat被OOM Killer杀死,那么在catalina.out的末尾附近会出现单词“Killed”,以此可以判断Tomcat是否已被杀死。 - Tom
尝试向您的系统添加交换文件。它不必很大。https://superuser.com/questions/1445510/how-do-i-run-xwiki-in-centos7-with-1gb-ram - Chloe
4个回答

15

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

您的操作系统可能会提供其他进程监视工具;您可以描述一下您的环境或者在serverfault.com上询问。

也有可能是jvisualvm导致了崩溃。

我建议尝试重现问题,并逐渐简化场景以帮助确定原因。


1
谢谢Erickson,我应该在哪里找到这个日志文件?我猜在我的JDK目录或附近? - IAmYourFaja
啊,看起来要么是当前工作目录,要么是/tmp。 - IAmYourFaja
这取决于您的操作系统以及如何运行Tomcat。在Windows上,它们可能会显示在桌面上,除非您正在作为服务运行。否则,它们应该在崩溃进程的当前工作目录中。 - erickson
6
我遇到了同样的问题。我的Tomcat无日志崩溃。我使用的是CentOS 6.2。我检查了hs_err_pid,但没有任何日志。同时,我的日志中也没有发现JVM崩溃。我还查找了OOM killer日志,但也没有找到。请问你能指导我解决这个问题吗? - Dilip Rajkumar
1
抱歉点了踩的按钮,我是误点了 :( 我无法撤回。 - kodmanyagha
显示剩余3条评论

6

另一个可能性是操作系统的内存不足,而OOM Killer正在终止进程。在这种情况下,JVM将无法获得机会编写堆转储或hs_err_pid文件。


4

0

很抱歉我不得不从 @erickson 那里取消绿色勾选。我最终找到了导致Tomcat崩溃的原因。

看起来一个分析插件与VisualVM未正确配置,试图在Tomcat进程上运行分析导致它崩溃。

正在调查原因,并在得知更多后更新此答案。


5
您的意思是,“jvisualvm 也有可能引起崩溃?” ;) - erickson
2
当你知道所有细节时,你难道不应该只接受答案吗? - Chloe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接