4

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

操作系统版本:RED HAT ENTERPRISE LINUX 服务器版本 6.3 (SANTIAGO)
服务器型号: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 下看不到系统消息。

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

    java 标志 ( -xrs) 应该防止 Java 运行时环境处理此类异常信号SIGSEGVSIGABRT但无济于事

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

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

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

    附加进程 12917 - 中断退出 futex(0x7f6b9e8ab9d0,FUTEX_WAIT,12918,NULLPANIC:附加 pid 12917 以 143 退出

    我们不能运行starce -f以包含所有线程,因为它会导致我们的应用程序卡住。但是,使用命令杀死子进程的kill行为类似——我们看到父 JVM 退出并出现错误代码 143,我们还看到发送到子进程的信号。

  3. 我们还使用 java -XX:+HeapDumpOnOutOfMemoryErroroptind 运行,为由于内存不足错误而导致的 jvm 崩溃创建堆转储,但由于崩溃,没有创建核心转储或堆转储。

有任何想法吗?

4

1 回答 1

0

有没有可能,在崩溃之前,有某种内存耗尽,所以 java 进程可能会被 OOM 杀死。另外,我发现一个链接http://bugs.centos.org/view.php?id=4059描述了一个类似的问题。

于 2013-04-11T03:24:42.047 回答