一、信息分析
1.1、介绍
致命错误出现的时候,JVM生成了hs_err_pid<pid>.log
这样的文件,其中往往包含了虚拟机崩溃原因的重要信息。默认情况下文件是创建在工作目录下的(如果没权限创建的话JVM会尝试把文件写到/tmp这样的临时目录下面去)。
文件格式和路径也可以通过参数指定,比如:
java -XX:ErrorFile=/var/log/java/java_error%p.log
这个log文件将包含信息:
- 触发致命错误的操作异常或者信号。
- 版本和配置信息。
- 触发致命异常的线程详细信息和线程栈。
- 当前运行的线程列表和它们的状态。
- 堆的总括信息。
- 加载的本地库。
- 命令行参数。
- 环境变量。
- 操作系统CPU的详细信息。
1.2、详细分析
1.2.1、概要信息
SIGSEGV (0xb) at pc=0x03568cf4, pid=16819, tid=3073346448
一个非预期的错误被JRE检测到,其中:
- SIGSEGV是信号名称
- 0xb是信号码
- pc=0x03568cf4指的是程序计数器的值
- pid=16819是进程号
- tid=3073346448是线程号
1.2.2、JRE和JVM的版本信息
JRE version: 6.0_32-b05
Java VM: Java HotSpot(TM) Server VM (20.7-b02 mixed mode linux-x86 )
运行在mixed模式下。
1.2.3、问题帧的信息
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库+偏移量的方式。
1.2.4、第一部分是线程信息
Current thread (0x09f30c00): JavaThread”main”[_thread_in_native, id=16822, stack(0xb72a8000,0xb72f9000)]
- 当前线程的:
- 0x09f30c00:指针
- JavaThread:线程类型,可能的类型包括JavaThread
- VMThread
- CompilerThread