当前位置: 首页 > 面试题库 >

如何调查JVM崩溃的原因?

阮健
2023-03-14
问题内容

一天前,经过几个月的正常工作,我们的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()可能触发相同崩溃的代码



 类似资料:
  • 希望你做得很好。 我有一个C语言的JNI实现,其中一个C函数连接到当前JVM线程并回调一个Java方法,这实际上是在attachCurrentThread()函数调用时使JVM崩溃。我的实现基于链接中给出的答案,保持对JNIEnv环境的全局引用 线程创建部分,它将侦听套接字连接以接受事件并注入GetEvent函数。 回调函数 在接收到事件时执行GetEvent()后,我的JVM在AttachMon

  • 不久前,我打开电脑处理我一直在开发的Minecraft mod,但我没有像往常一样运行,而是得到了这个例外: 在尝试了几个小时之后,我意识到我的代码没有问题。我试着运行我制作的其他java程序。一个简单的Hello World程序工作了,但我的LWJGL游戏也出现了同样的异常,我使用的任何程序都因文件未找到而崩溃。IO程序也适用于通过GitHub从事同一项目的其他人。 来自IntelliJ的日志太

  • 在JavaAccessBridge屏幕捕获中发现以下错误。 此错误随机发生。请告诉我这个错误的原因?请建议我如何修理它? > --------------T H R E A D----------- 当前线程(0x05D31800):JavaThread“thread-6”后台进程[_thread_in_java,ID=16140,堆栈(0x04D60000,0x04DB0000)] SIGINF

  • 问题内容: 我的JVM一直在libzip.so上持续崩溃,并且出乎意料。我已经将该错误提交给了Oracle,但决定看看这里是否有人遇到过该问题,如果是,您如何处理它?这是一个正在运行的网络应用 Linux 2.6.34-gentoo-r6#1 SMP Fri Sep 24 00:15:06 EDT 2010 i686 Intel(R)Xeon(R)CPU X5460 @ 3.16GHz 真正的带j

  • 经过大量的谷歌搜索,我在LWJGL渲染VBO立方体时遇到了这个问题。基本上,当我启用法线时,JVM会崩溃。这很可能与我在Plane.java中设置常态的方式有关。由于我仍在学习VBO,我似乎不知道如何解决这个问题。你能看一看,让我知道我可能在哪里出错了吗? Cube.java: 平面. java: 让我知道你们的想法。我已经在三台独立的计算机上测试了代码,每一台都有相同的结果。

  • 问题内容: 我有一个第三方.NET Assembly和一个大型Java应用程序。我需要从Java应用程序调用.NET类库提供的方法。该程序集不支持COM。我已经搜索过网络,到目前为止,我有以下内容: C#代码(cslib.cs): 编译使用(使用.net 3.5,但使用2.0时也会发生同样的情况): C ++代码(clib.cpp): (使用VC 2008工具进行编译),但使用2003工具时也会发