如何调查JVM崩溃的原因?

一天前,经过几个月的正常工作,我们的Java应用偶尔会因以下错误而崩溃:

#

# A fatal error has been detected by the Java Runtime Environment:

#

# Internal Error (safepoint.cpp:247), pid=2075, tid=140042095163136

# guarantee(PageArmed == 0) failed: invariant

#

# JRE version: 6.0_23-b05

# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.0-b09 mixed mode linux-amd64 compressed oops)

# An error report file with more information is saved as:

# /var/chat/jSocketer/build/hs_err_pid2075.log

#

# If you would like to submit a bug report, please visit:

# http://java.sun.com/webapps/bugreport/crash.jsp

#

我查看了hs_err_pid2075.log,发现有一个活动线程正在处理网络通信。但是,最近几个月没有进行任何应用程序或环境更改。也没有任何负载增长。我该怎么做才能了解崩溃的原因?有没有一些通用的步骤来调查jvm崩溃?

UPD http://www.wuala.com/ubear/public

回答:

崩溃发生在JVM中,而不是外部本机代码中。但是,它崩溃的操作已由外部DLL启动。

hs_err_pid文件中的这一行说明了崩溃的操作:

VM_Operation (0x00007f5e16e35450): GetAllStackTraces, mode: safepoint, requested by thread 0x0000000040796000

现在,线程0x0000000040796000是

0x0000000040796000 JavaThread "YJPAgent-Telemetry" daemon [_thread_blocked, id=2115, stack(0x00007f5e16d36000,0x00007f5e16e37000)]

这是Yourkit创建的线程。剖析器需要调用“ GetAllStackTraces”才能进行采样。如果删除分析器,则不会发生崩溃。

使用此信息无法说出导致崩溃的原因,但是您可以尝试以下操作:删除所有-XX

VM参数,-verbose:gc和调试VM参数。它们可能会干扰JVM的性能分析接口。

调用java.lang.Thread#getAllStackTraces()java.lang.Thread#getStackTrace()可能触发相同崩溃的代码

以上是 如何调查JVM崩溃的原因? 的全部内容, 来源链接: utcz.com/qa/399068.html

回到顶部