尝试在64位Linux计算机上诊断一些奇怪的Tomcat 6和/或JVM错误:
操作系统版本:RED HAT ENTERPRISE LINUX服务器版本6.3(SANTIAGO)
服务器型号:VMWARE VIRTUAL PLATFORM()
我正在虚拟机上运行一些应用程序测试,并面临一个奇怪的问题。 在正好运行2个进程的某些VM上出现问题:Tomcat应用程序服务器进程(java进程)和监视进程,在一个randomal点,在执行一些随机小时之后,可以在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:+HeapDumpOnOutOfMemoryError
optind,因为内存不足错误而导致jvm崩溃的堆转储,但由于粉碎而没有核心转储或堆转储。
有什么想法吗?
答案 0 :(得分:0)
是否有可能,在崩溃之前,存在某种内存耗尽,因此可以通过OOM杀死java进程。 另外,我找到了一个描述类似问题的链接http://bugs.centos.org/view.php?id=4059。