`
shuofenglxy
  • 浏览: 195430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM Crash分析

    博客分类:
  • JVM
阅读更多

JVM Crash一般会生成core.pid文件和hs_err_pidXXXX.log。

打开hs_err_pidXXXX.log文件 一般有如下内容:

 

 

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

#

#  SIGBUS (0x7) at pc=0x00007fb7006c6f31, pid=8864, tid=140421610395392

#

# JRE version: 6.0_20-b02

# Java VM: Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode linux-amd64 )

# Problematic frame:

# C  [libzip.so+0xaf31]

#

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

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

# The crash happened outside the Java Virtual Machine in native code.

# See problematic frame for where to report the bug.

 

其中红色标识的C表示执行Native code的时候出现问题。

 

查找C  [libzip.so+0xaf31]

 

可以看到其下部分提示如下:

 

 

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

J  java.util.zip.ZipFile.getEntry(JLjava/lang/String;Z)J

J  sun.misc.URLClassPath$JarLoader.getResource(Ljava/lang/String;Z)Lsun/misc/Resource;

J  sun.misc.URLClassPath$JarLoader.findResource(Ljava/lang/String;Z)Ljava/net/URL;

j  sun.misc.URLClassPath$1.next()Z+42

j  sun.misc.URLClassPath$1.hasMoreElements()Z+1

j  java.net.URLClassLoader$3$1.run()Ljava/lang/Object;+7

v  ~StubRoutines::call_stub

j  java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+0

j  java.net.URLClassLoader$3.next()Z+24

j  java.net.URLClassLoader$3.hasMoreElements()Z+1

j  sun.misc.CompoundEnumeration.next()Z+33

j  sun.misc.CompoundEnumeration.hasMoreElements()Z+1

j  org.apache.hadoop.mapred.JobConf.findContainingJar(Ljava/lang/Class;)Ljava/lang/String;+42

j  org.apache.hadoop.mapred.JobConf.setJarByClass(Ljava/lang/Class;)V+1

j  org.apache.hadoop.mapreduce.Job.setJarByClass(Ljava/lang/Class;)V+5

j  com.panguso.recommend.mapred.usermodel.task.UserModelTask.run()V+53

j  com.panguso.recommend.common.mission.AbstractMission.unitJob()V+198

j  com.panguso.recommend.common.mission.AbstractMission.access$100(Lcom/panguso/recommend/common/mission/AbstractMission;)V+1

j  com.panguso.recommend.common.mission.AbstractMission$1.run()V+39

j  java.util.TimerThread.mainLoop()V+221

j  java.util.TimerThread.run()V+1

v  ~StubRoutines::call_stub

 

定位到自己的代码,发现代码没有问题。则定位到jar包。想到jar在运行时发生过替换。断定可能由于替换导致程序发生变化,使得JVM找不到相关代码出现问题。

 

确认阶段:查看相关类似问题,在https://forums.oracle.com/forums/thread.jspa?threadID=1540064发现一个类似问题。通过答复可以确认此问题由无法访问到相关jar或原类产生。

 

 

 

至此,问题定位。原因也明了了。

 

 

 

总结一下:JVM crash后 ,避免查看core.pid文件。直接分析hs_error_pidXXXX.log文件。通过其中的异常信息定位分析原因,断定可能的问题点,分析验证即可。

 

 

 

还可参见:http://www.oracle.com/technetwork/java/javase/crashes-137240.html

分享到:
评论
5 楼 only_java 2013-11-15  
博主,你好。感谢这篇你的这篇文章,我的问题是跟你一样,也是在跑mapreduce程序的时候crash的,仔细检查mapreduce类也没发现啥问题。在看到你这边文章后我也确定是无法访问到相关jar或原类导致,但是我不知道为啥会无法访问?我仔细看了下那天更新的jar包也是在crash之后,但那时有在新增datanode节点。你这边是怎么解决这个问题的呢?
jdk1.7+hadoop1.0.4
4 楼 shuofenglxy 2012-06-19  

1 确保程序运行时没有更新程序需要的相关jar包。
2 确保程序运行时内存空间足够,可以通过相关命令查看进程的内存使用情况,如果full gc过多 说明内存不足,可适当开大内存或者是查代码 看内存有无泄露。

3  建议把jdk版本升级到1.6后续相关版本。

这些应该能解决问题。

renduly 写道
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00de0b1b, pid=14291, tid=3063518928
#
# JRE version: 6.0_18-b18
# Java VM: OpenJDK Client VM (14.0-b16 mixed mode linux-x86 )
# Derivative: IcedTea6 1.8.8
# Distribution: Fedora release 13 (Goddard), package fedora-51.1.8.8.fc13-i386
# Problematic frame:
# C  [libz.so.1+0x4b1b]

Stack: [0xbfbdf000,0xbfc2f000],  sp=0xbfc29f60,  free space=299k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libz.so.1+0x4b1b]
C  [libz.so.1+0x4fa4]  deflate+0x134
C  [libzip.so+0x21da]  Java_java_util_zip_Deflater_deflateBytes+0x2aa
j  java.util.zip.Deflater.deflateBytes(J[BII)I+0
j  java.util.zip.Deflater.deflate([BII)I+55
j  java.util.zip.DeflaterOutputStream.deflate()V+14
j  java.util.zip.DeflaterOutputStream.finish()V+28
j  org.hsqldb.lib.ZipUnzipFile.compressFile(Ljava/lang/String;Ljava/lang/String;Lorg/hsqldb/lib/FileAccess;)V+110
j  org.hsqldb.persist.DataFileCache.backupFile()V+49
j  org.hsqldb.persist.Log.checkpoint(Z)V+74
j  org.hsqldb.persist.Logger.checkpoint(Z)V+32


Environment Variables:
JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
CLASSPATH=/opt/jdk1.6.0_13/jre/lib/rt.jar:.
PATH=/opt/jdk1.6.0_13/bin:.:/opt/jdk1.5/bin:/root/myshell:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
SHELL=/bin/bash
DISPLAY=:0.0
OS=LINUX


3 楼 renduly 2012-06-18  
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00de0b1b, pid=14291, tid=3063518928
#
# JRE version: 6.0_18-b18
# Java VM: OpenJDK Client VM (14.0-b16 mixed mode linux-x86 )
# Derivative: IcedTea6 1.8.8
# Distribution: Fedora release 13 (Goddard), package fedora-51.1.8.8.fc13-i386
# Problematic frame:
# C  [libz.so.1+0x4b1b]

Stack: [0xbfbdf000,0xbfc2f000],  sp=0xbfc29f60,  free space=299k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libz.so.1+0x4b1b]
C  [libz.so.1+0x4fa4]  deflate+0x134
C  [libzip.so+0x21da]  Java_java_util_zip_Deflater_deflateBytes+0x2aa
j  java.util.zip.Deflater.deflateBytes(J[BII)I+0
j  java.util.zip.Deflater.deflate([BII)I+55
j  java.util.zip.DeflaterOutputStream.deflate()V+14
j  java.util.zip.DeflaterOutputStream.finish()V+28
j  org.hsqldb.lib.ZipUnzipFile.compressFile(Ljava/lang/String;Ljava/lang/String;Lorg/hsqldb/lib/FileAccess;)V+110
j  org.hsqldb.persist.DataFileCache.backupFile()V+49
j  org.hsqldb.persist.Log.checkpoint(Z)V+74
j  org.hsqldb.persist.Logger.checkpoint(Z)V+32


Environment Variables:
JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
CLASSPATH=/opt/jdk1.6.0_13/jre/lib/rt.jar:.
PATH=/opt/jdk1.6.0_13/bin:.:/opt/jdk1.5/bin:/root/myshell:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
SHELL=/bin/bash
DISPLAY=:0.0
OS=LINUX

2 楼 shuofenglxy 2012-06-17  
renduly 写道
博主好。这两天我在公司程序也出现了类似的问题。博主能否说的详细点,具体是什么问题。
怎么解决的。 谢谢
我现在的系统是fedora 13.系统jre是1.6.0_18。libz使用的1.2.3 。运行程序会有问题。
程序是c++通过jni调用了jvm。使用了hsql引擎。

我换用ubuntu10 系统jre 1.6.0_20。libz使用的1.2.3.4 程序运行没有问题。

我把ubuntu下的Libz拷到fedora下,替换fedora下的libz,运行程序也没有问题。但是jvm还是有异常报出。

还原fedora系统。运行程序,指定使用特定的jre(1.6.0_13)。程序没有问题。


方便的话把你出现问题的这个hs_err_pidXXXX.log 文件内容复制出来吗
1 楼 renduly 2012-06-15  
博主好。这两天我在公司程序也出现了类似的问题。博主能否说的详细点,具体是什么问题。
怎么解决的。 谢谢
我现在的系统是fedora 13.系统jre是1.6.0_18。libz使用的1.2.3 。运行程序会有问题。
程序是c++通过jni调用了jvm。使用了hsql引擎。

我换用ubuntu10 系统jre 1.6.0_20。libz使用的1.2.3.4 程序运行没有问题。

我把ubuntu下的Libz拷到fedora下,替换fedora下的libz,运行程序也没有问题。但是jvm还是有异常报出。

还原fedora系统。运行程序,指定使用特定的jre(1.6.0_13)。程序没有问题。

相关推荐

    JVM crash 错误日志分析

    在Java开发过程中,JVM(Java Virtual ...总之,JVM崩溃日志分析是一个细致的过程,需要结合代码、日志和各种工具来定位问题。通过深入学习和实践,开发者可以更好地理解和处理这类问题,确保Java应用的稳定运行。

    jvm crash的崩溃日志详细分析及注意点

    分析JVM崩溃日志时,重点是定位问题所在的代码行,了解触发错误的操作,以及查看是否有内存管理问题,如堆溢出或栈溢出。同时,还要检查堆栈跟踪,确定哪些线程或方法在崩溃时刻正在执行,并结合Java堆、方法区、元...

    年轻代gc jvm crash

    "年轻代GC JVM crash"可能是因为在垃圾回收过程中遇到了严重问题,导致JVM崩溃。这可能是由于以下原因: 1. **内存溢出**:如果年轻代的空间不足以容纳新分配的对象,或者Survivor区无法容纳从Eden区晋升的对象,就...

    JVM Crash,生成hs_err_pid.log文件

    标题"JVM Crash,生成hs_err_pid.log文件"指的是Java虚拟机在运行过程中遇到了致命问题,导致其终止运行,并自动生成了一个错误日志文件。这个文件通常位于JVM崩溃时的工作目录下,文件名由“hs_err_pid”和进程ID...

    hs-err-pidXXX.log 文件分析利器

    这是一个jvm crash分析工具,主要分析jvm crash的原因,以及常见的解决手段。 ## 使用方式 java -jar CrashAnalysis-1.0-SNAPSHOT.jar ${hs_err_pid.log} ${hs_err_pid.log} 是jvm crash后生成的日志。 ## 效果 ...

    java线上故障分析-线程dump,堆内存分析

    例如,在JVM crash的情况下,通常会在工作目录下自动生成一个error文件,该文件包含了crash时的详细信息,包括但不限于信号类型、错误码、问题发生的框架及堆栈信息。 在提供的案例中,可以看到JVM crash的日志信息...

    01 JVM崩块案例分析

    Crash崩溃日志

    java 虚拟机问题分析大全

    - **Crash文件分析**:当JVM出现异常崩溃时,往往会生成crash文件,通过分析这些文件可以定位到问题发生的具体原因。 - **内存分析**:使用工具如MAT(Memory Analyzer Tool)、VisualVM等分析堆内存和非堆内存的...

    crash-dump-analysis:Java Crash Dump 分析演示的示例代码

    本示例代码"crash-dump-analysis"旨在帮助开发者学习如何对Java Crash Dump进行解析和分析,以识别和修复应用中的问题。下面将详细介绍这个领域的关键知识点: 1. **Java虚拟机结构**:理解JVM的内存模型是分析崩溃...

    jvm日志解读

    5. **线程快照**:如果JVM在崩溃时能够生成线程快照,那么我们可以看到每个线程的状态(运行、等待、阻塞等),这对于分析死锁和其他多线程问题非常有价值。 解读JVM日志需要一定的经验和技术背景,但借助一些工具...

    HotSpot实战高清版本

    Cache、Perf Data、Crash 分析方法、转储分析方法、 垃圾收集器的设计演进、CMS 和 G1 收集器、栈、JVM 对硬件寄存器的利用、栈顶缓存技术、解释器、字节 码表、转发表、Stubs、Code Cache、Code 生成器、JIT 编译器...

    Java开发的SHELL CRaSH.7z

    "CRaSH"可能表示程序出现了异常,通过分析堆栈跟踪,可以找到导致问题的具体代码行。 7. **Java性能优化**: 如果"CRaSH"与性能问题有关,那么了解Java内存模型(堆、栈、方法区等)、垃圾回收机制和性能调优工具...

    JDK15-troubleshooting-guide.pdf

    2. Java 虚拟机(JVM)的故障排除:该指南提供了 JVM 故障排除的方法和步骤,包括 JVM crash 的原因分析、堆栈跟踪的获取、JVM 配置文件的编辑等。 3. Java 应用程序的故障排除:该指南介绍了 Java 应用程序的故障...

    IBM内部javacore分析pdf教程文件

    通过分析javacore文件可以获取到发生问题时刻JVM的所有线程状态、内存使用情况等关键信息,这对于诊断问题的根本原因非常有帮助,并有助于采取相应的预防措施以避免类似问题再次发生。 #### 三、javacore文件的生成...

    HotSpot实战

    Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量池Cache、Perf Data、Crash分析方法、转储分析方法、垃圾收集器的设计演进、CMS和G1收集器、栈、JVM对硬件寄存器的利用、栈顶缓存技术、解释器、字节...

    javacore文件及heapdump文件分析

    在 WebSphere Application Server 中,javacore 文件可以帮助我们分析和判断一些故障,如:100% CPU Usage、Crash、Hang/Performance 问题。 需要注意的是,在某些情况下,javacore 文件可能不能正常产生,可能是...

    Java开发的SHELL CRaSH.gz

    它支持JMX(Java Management Extensions),可以与JVM管理工具集成,提供实时监控和性能分析。 2. **SSH集成**:CRaSH与SSH紧密结合,使得用户能够安全地通过SSH连接到运行中的Java应用,并执行自定义命令,进行...

    java1.8.zip

    首先,"cash"可能是笔误,正确的术语应该是“crash”,意为程序崩溃。Java应用崩溃通常与内存问题、线程死锁、错误的代码实现或不兼容的库有关。在JDK 1.8中,JVM(Java虚拟机)可能会由于以下原因出现奔溃: 1. **...

Global site tag (gtag.js) - Google Analytics