`
shuofenglxy
  • 浏览: 189525 次
  • 性别: 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 错误日志分析

    NULL 博文链接:https://myspace1916.iteye.com/blog/1441465

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

    本篇文章主要介绍了jvm crash的崩溃日志详细分析及注意点。具有很好的参考价值,下面跟着小编一起来看下吧

    CrashAnalysis-master.zip

    这是一个jvm crash分析工具,主要分析jvm crash的原因,以及常见的解决手段

    JVM Crash,生成hs_err_pid.log文件

    NULL 博文链接:https://txyly998.iteye.com/blog/1264721

    01 JVM崩块案例分析

    Crash崩溃日志

    HotSpot实战高清版本

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

    HotSpot实战

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

    java 虚拟机问题分析大全

    虚拟机问题分析 crash文件分析 性能调优

    Java项目如何进行性能优化

    资源概述:1,性能问题分析;2,压力测试&调优 内容导语: 01-性能优化的终极目标是什么? 用户体验 = 产品设计(非技术) + 系统性能 ≈ 系统性能 = 快?...移动端:端到端响应时间、Crash率、内存使用率、FPS...

    java开源包8

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包1

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包11

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包2

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包3

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包6

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包5

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包10

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包4

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

    java开源包7

    JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...

Global site tag (gtag.js) - Google Analytics