【问题标题】:Tomcat process suddenly crushesTomcat进程突然崩溃
【发布时间】: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 下看不到任何系统消息。

  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:+HeapDumpOnOutOfMemoryError optind 运行,为由于内存不足错误导致的 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 关于请求我不确定,实际上在服务器日志中我们可以看到关闭请求的疼痛。

标签: java linux jvm tomcat6


【解决方案1】:

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

【讨论】:

  • 使用 -Xdump 标志运行进程后,我们得到了转储文件,但似乎它们不包含任何有用的信息。 env 上的所有监控工具都没有向我们显示任何内存问题。
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多