Tomcat进程突然崩溃

4
尝试在64位Linux机器上诊断一些奇怪的Tomcat 6和/或JVM错误:

操作系统版本:RED HAT ENTERPRISE LINUX SERVER RELEASE 6.3(SANTIAGO)
服务器型号:VMWARE VIRTUAL PLATFORM()

我在虚拟机上运行一些应用程序测试,并面临一个奇怪的问题。该问题发生在某些虚拟机上,其中正好有两个进程正在运行:Tomcat应用程序服务器进程(Java进程)和监视器进程,在执行了一些随机小时后的某个随机点上,可以在失败的VM的catalina.out(服务器日志)中找到以下消息(该问题并不总是发生在同一台机器上)。
org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-50100
INFO: Stopping service Catalina
org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080

在此时刻,Tomcat进程已关闭,执行失败。 内存或CPU使用情况上没有任何提示。 在/var/logs下也没有看到任何系统消息。

  1. 在第一阶段,我们怀疑外部信号正在杀死我们的Tomcat进程,并尝试使用进程的JVM参数-Xrs标志,但问题仍然存在。

    Java标志(-xrs)应该防止Java运行时环境处理异常信号,如SIGSEGVSIGABRT,但没有帮助。

    在添加xrs标志之前,我们看到INFO: Pausing Coyote HTTP/1.1 on http-50100错误发生,因为结果信号。

    在添加了xrs标志后,kettle/tomcat的行为方式相同,并且在日志文件中没有任何错误。

  2. 对相关进程运行starce命令会给我们以下输出:

    Process 12917 attached - interrupt to quit futex(0x7f6b9e8ab9d0, FUTEX_WAIT, 12918, NULLPANIC: attached pid 12917 exited with 143

    我们无法运行starce -f来包含所有线程,因为它会导致我们的应用程序被卡住。 但是,使用kill命令杀死son进程的行为类似-我们看到父JVM退出,并显示发送给子进程的信号。

  3. 我们还使用java -XX:+HeapDumpOnOutOfMemoryError选项运行,以便在由于内存不足而导致jvm崩溃时创建堆转储,但由于崩溃而没有创建任何核心转储或堆转储。

有什么想法吗?


我不确定他们是否找到了解决方案,但这个线程有一个类似的听起来的问题- http://comments.gmane.org/gmane.comp.jakarta.tomcat.user/206745 - matt freake
Tomcat 在崩溃时是否接收请求?没有部署应用程序会崩溃吗? - fglez
我现在已经使用strace对信号运行了我的进程,并得到了以下输出: 1 进程24631已连接 - 中断退出 2 --- SIGRT_2(实时信号0)@ 0(0)--- 3 rt_sigreturn(0x7fe4d8b39850)= 202 4 PANIC:附加的pid 24631以143退出 关于请求,我不确定,实际上在服务器日志中我们可以看到关闭请求。 - Oreli Levi
1个回答

0

在崩溃之前,是否有可能存在某种内存耗尽的情况,导致 Java 进程被 OOM 杀死。

此外,我找到了一个链接 http://bugs.centos.org/view.php?id=4059 描述了类似的问题。


在使用 -Xdump 标志运行进程后,我们得到了转储文件,但似乎它们不包含任何有用的信息。环境中的所有监视工具都没有显示出任何内存问题。 - Oreli Levi

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