JVM Crash 日志(hs_err_pid.log)分析

大家好,最新碰到JVM Crash的问题,拿出来跟大家分享下。


这个文件将包括:

  • 触发致命错误的操作异常或者信号;

  • 版本和配置信息;

  • 触发致命异常的线程详细信息和线程栈;

  • 当前运行的线程列表和它们的状态;

  • 堆的总括信息;

  • 加载的本地库;

  • 命令行参数;

  • 环境变量;

  • 操作系统CPU的详细信息。


第一部分


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

#  SIGSEGV (0xb) at      pc=0x03568cf4,       pid=16819,          tid=3073346448
#  信号名称(信号码)    程序计数器的值(栈)   线程号              进程号

# JRE version: 6.0_32-b05 JRE版本

# Java VM: Java HotSpot(TM) Server VM (20.7-b02 mixed mode linux-x86 )

  可以看到JVM的名字(HotSpot)、类型(client)和(Server)。除此之外,我们还知道JVM以混合模式(mixed mode)在运行,这是HotSpot默认的运行模式,意味着JVM在运行时可以动态的把字节码编译为本地代码。

  1、-Xmixed           mixed mode execution (default)
    混合模式执行
  2、-Xint             interpreted mode execution only
    解释模式执行 

  3、-Xcomp            compiled mode

    纯编译模式


# Problematic frame: 问题框架
# C  [libgtk-x11-2.0.so.0+0x19fcf4]  __float128+0x19fcf4

  • C:帧类型为本地帧,帧的类型包括:

    • C:本地C帧

    • j:解释的Java帧

    • V:虚拟机帧

    • v:虚拟机生成的存根栈帧

    • J:其他帧类型,包括编译后的Java帧

libgtk-x11-2.0.so.0+0x19fcf4:和程序计数器(pc)表达的含义一样,但是用的是本地so库+偏移量的方式。

#
# 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.
#


第二部分

---------------  T H R E A D  ---------------

Current thread (0x09f30c00): 

当前线程        指针 

      

JavaThread

线程类型,可能的类型包括:

  1.   JavaThread

  2.   VMThread

  3.   CompilerThread

  4.   GCTaskThread

  5.   WatcherThread

  6.   ConcurrentMarkSweepThread


"main" [_thread_in_native, ]

  main:名字

  1. _thread_in_native:线程当前状态,状态枚举包括:

  2. _thread_uninitialized:线程还没有创建,它只在内存原因崩溃的时候才出现

  3. _thread_new:线程已经被创建,但是还没有启动

  4. _thread_in_native:线程正在执行本地代码,一般这种情况很可能是本地代码有问题

  5. _thread_in_vm:线程正在执行虚拟机代码

  6. _thread_in_Java:线程正在执行解释或者编译后的Java代码

  7. _thread_blocked:线程处于阻塞状态

  8. …_trans:以_trans结尾,线程正处于要切换到其它状态的中间状态


id=16822,stack(0xb72a8000,0xb72f9000)

线程ID   栈区间


siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000010

这部分是导致虚拟机终止的非预期的信号信息,含义前面已经大致提到过了。其中si_errno和si_code是Linux下用来鉴别异常的,Windows下是一个ExceptionCode。


Registers:
EAX=0x00000000, EBX=0x0375dd84, ECX=0x00000000, EDX=0x00000000
ESP=0xb72f0fa0, EBP=0xb72f0fb8, ESI=0x00000000, EDI=0x0a6c1800
EIP=0x03568cf4, EFLAGS=0x00010246, CR2=0x00000010

这是寄存器上下文即程序计数器寄存器
JVM支持同一时间同时运行多个线程,每一个线程都有它们自己的pc register。在同一个时刻,JVM的线程只能运行一个单独方法中的代码,此方法称为该线程的当前方法(Current Method)。 如果这个当前方法不是native的,PC register就指向正在被执行的JVM指令的地址。而如果一个当前方法是native的,则pc register中的值是不确定的。Pc register有足够的空间来存储returnAddress或者native指针。


Top of Stack: (sp=0xb72f0fa0)
0xb72f0fa0:   00000000 00402250 0040217f 0375dd84
0xb72f0fb0:   00000000 0a6c1800 b72f0fe8 0356c2c0
0xb72f0fc0:   00000000 0a6c1800 b72f0fe8 003b3e77
0xb72f0fd0:   003e6c8b 0a1a70d0 0a193358 0375dd84
0xb72f0fe0:   0a276418 0a276418 b72f1048 03536c56
0xb72f0ff0:   0acad000 0b3ca978 0000000c 00dd0674
0xb72f1000:   00000003 0a2c7d50 b72f1038 0000330c
0xb72f1010:   ffffffff ffffffff 00000001 00000001

Instructions: (pc=0x03568cf4)
0x03568cd4:   89 14 24 89 75 f8 89 d6 89 7d fc 89 c7 e8 7e 1b
0x03568ce4:   ea ff 89 34 24 89 87 d4 02 00 00 e8 30 00 ea ff
0x03568cf4:   8b 40 10 89 3c 24 c7 44 24 08 00 00 00 00 89 87
0x03568d04:   d0 02 00 00 8b 83 88 24 00 00 89 44 24 04 e8 dd
栈顶程序计数器旁的操作码,它们可以被反汇编成系统崩溃前执行的指令。




Register to memory mapping:

EAX=0x00000000 is an unknown value
EBX=0x0375dd84: <offset 0x394d84> in /usr/lib/libgtk-x11-2.0.so.0 at 0x033c9000
ECX=0x00000000 is an unknown value
EDX=0x00000000 is an unknown value
ESP=0xb72f0fa0 is pointing into the stack for thread: 0x09f30c00
EBP=0xb72f0fb8 is pointing into the stack for thread: 0x09f30c00
ESI=0x00000000 is an unknown value
EDI=0x0a6c1800 is an unknown value
寄存器和内存映射信息



Stack: [0xb72a8000,0xb72f9000],  sp=0xb72f0fa0,  free space=291k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libgtk-x11-2.0.so.0+0x19fcf4]  __float128+0x19fcf4
C  [libgtk-x11-2.0.so.0+0x1a32c0]  __float128+0xc0
C  [libgtk-x11-2.0.so.0+0x16dc56]  __float128+0x16dc56
C  [libgobject-2.0.so.0+0x16169]  __float128+0x49
C  [libgobject-2.0.so.0+0x7639]  __float128+0x7639
C  [libgobject-2.0.so.0+0x8e98]  __float128+0x128
C  [libgobject-2.0.so.0+0x1a242]  __float128+0x1a242
C  [libgobject-2.0.so.0+0x1b2e7]  __float128+0x8c7
C  [libgobject-2.0.so.0+0x1b4a9]  __float128+0x29
C  [libgtk-x11-2.0.so.0+0x24b48a]  __float128+0xba
C  [libgtk-x11-2.0.so.0+0x24b779]  __float128+0xd9
C  [libgtk-x11-2.0.so.0+0x24badc]  __float128+0x24badc
C  [libgobject-2.0.so.0+0x16169]  __float128+0x49
C  [libgobject-2.0.so.0+0x7639]  __float128+0x7639
C  [libgobject-2.0.so.0+0x8e98]  __float128+0x128
C  [libgobject-2.0.so.0+0x1a242]  __float128+0x1a242
C  [libgobject-2.0.so.0+0x1b2e7]  __float128+0x8c7
C  [libgobject-2.0.so.0+0x1b4a9]  __float128+0x29
C  [libgtk-x11-2.0.so.0+0x24ab18]  __float128+0x58
C  [libgtk-x11-2.0.so.0+0x1893ff]  __float128+0x1893ff
C  [libgobject-2.0.so.0+0x157d9]  __float128+0x59
C  [libgobject-2.0.so.0+0x7639]  __float128+0x7639
C  [libgobject-2.0.so.0+0x8f81]  __float128+0x211
C  [libgobject-2.0.so.0+0x1a242]  __float128+0x1a242
C  [libgobject-2.0.so.0+0x1b2e7]  __float128+0x8c7
C  [libgobject-2.0.so.0+0x1b4a9]  __float128+0x29
C  [libgtk-x11-2.0.so.0+0x2497ea]  __float128+0x18a
C  [libgtk-x11-2.0.so.0+0xe518a]  __float128+0xe518a
C  [libswt-pi-gtk-3738.so+0x33f6a]  Java_org_eclipse_swt_internal_gtk_OS__1Call+0xf
J  org.eclipse.swt.internal.gtk.OS._Call(III)I
J  org.eclipse.swt.internal.gtk.OS.Call(III)I

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  org.eclipse.swt.internal.gtk.OS._Call(III)I
J  org.eclipse.swt.internal.gtk.OS.Call(III)I
j  org.eclipse.swt.widgets.Widget.fixedSizeAllocateProc(II)I+5
j  org.eclipse.swt.widgets.Display.fixedSizeAllocateProc(II)I+17
v  ~StubRoutines::call_stub
J  org.eclipse.swt.internal.gtk.OS._Call(III)I
J  org.eclipse.swt.internal.gtk.OS.Call(III)I
j  org.eclipse.swt.widgets.Widget.fixedSizeAllocateProc(II)I+5
j  org.eclipse.swt.widgets.Display.fixedSizeAllocateProc(II)I+17
v  ~StubRoutines::call_stub
J  org.eclipse.swt.internal.gtk.OS._Call(III)I
J  org.eclipse.swt.internal.gtk.OS.Call(III)I
j  org.eclipse.swt.widgets.Widget.fixedSizeAllocateProc(II)I+5
j  org.eclipse.swt.widgets.Display.fixedSizeAllocateProc(II)I+17
v  ~StubRoutines::call_stub

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值