【发布时间】:2013-04-08 08:56:37
【问题描述】:
尝试在 64 位 linux 机器上诊断一些奇怪的 Tomcat 6 和/或 JVM 错误:
操作系统版本:红帽企业 Linux 服务器版本 6.3(圣地亚哥)
服务器型号:VMWARE 虚拟平台 ()
我正在虚拟机上运行一些应用程序测试并遇到一个奇怪的问题。 该问题出现在某些运行 2 个进程的虚拟机上:Tomcat 应用程序服务器进程(java 进程)和一个监视进程,在一个随机点,在随机执行几个小时后,可以在 catalina.out 上找到以下消息(服务器日志)失败的VM(问题并不总是发生在同一台机器上):
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 下看不到任何系统消息。
-
在第一阶段,我们怀疑外部信号正在杀死我们的 Tomcat 进程,我们尝试将
-Xrs标志用于进程的 JVM 参数,但问题仍然存在。java 标志 (
-xrs) 应该防止 Java 运行时环境处理异常信号,例如SIGSEGV和SIGABRT无济于事在添加
xrs标志之前,我们看到INFO: Pausing Coyote HTTP/1.1 on http-50100发生错误,因为结果信号添加 `xrs 标志后,kettle/tomcat 的行为方式相同,并且在日志文件中没有任何错误的情况下崩溃。
-
在相关进程上运行 starce 命令会得到以下输出:
附加进程 12917 - 中断退出 futex(0x7f6b9e8ab9d0, FUTEX_WAIT, 12918, NULLPANIC: 附加 pid 12917 以 143 退出
我们不能运行
starce -f来包含所有线程,因为它会导致我们的应用程序卡住。 但是,使用kill命令杀死子进程的行为类似——我们看到父 JVM 以错误代码 143 退出,我们还看到发送到子进程的信号。 -
我们还使用 java
李>-XX:+HeapDumpOnOutOfMemoryErroroptind 运行,为由于内存不足错误导致的 jvm 崩溃创建堆转储,但由于崩溃,没有创建核心转储或堆转储。
有什么想法吗?
【问题讨论】:
-
我不确定他们是否找到了解决方案 - 但这个帖子有类似的问题 - comments.gmane.org/gmane.comp.jakarta.tomcat.user/206745
-
Tomcat 崩溃时是否接收请求?没有部署应用程序会崩溃吗?
-
我现在已经使用 strace 对信号运行我的进程并得到以下输出:1 附加进程 24631 - 中断退出 2 --- SIGRT_2 (实时信号 0) @ 0 (0) -- - 3 rt_sigreturn(0x7fe4d8b39850) = 202 4 PANIC: 附加 pid 24631 exited with 143 关于请求我不确定,实际上在服务器日志中我们可以看到关闭请求的疼痛。