java异常日志精简版

有时候难免会遇到java程序崩溃,需要看hs_err_pid<pid>.log。本文简述此文件的一些关键信息。
先说下配置参数的东东
设置日志记录文件:
-XX:ErrorFile=/var/log/java/java_error%p.log 

设置记录崩溃dump记录:
-XX:+HeapDumpOnOutOfMemoryError

dump 文件里,值得关注的线程状态有:
死锁,Deadlock(重点关注)
执行中,Runnable 
等待资源,Waiting on condition(重点关注)
等待获取监视器,Waiting on monitor entry(重点关注)
暂停,Suspended
对象等待中,Object.wait() 或 TIMED_WAITING
阻塞,Blocked(重点关注)
停止,Parked

文件内容的关键点:
首先是问题概要
#  SIGSEGV (0xb) at pc=0x000000000000007b, pid=533, tid=140130225481472

•SIGSEGV是信号名称
•0xb是信号码
•pc=0x000000000000007b指的是程序计数器的值
•pid=533是进程号
•tid=140130225481472是线程号

然后是问题帧信息
# Problematic frame:
# C  0x000000000000007b
#

帧的类型包括:
C:本地C帧
j:解释的Java帧
V:虚拟机帧
v:虚拟机生成的存根栈帧
J:其他帧类型,包括编译后的Java帧

接下来是线程信息
然后是虚拟机信息
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None

虚拟机状态包括:
•not at a safepoint:正常运行状态;
•at safepoint:所有线程都因为虚拟机等待状态而阻塞,等待一个虚拟机操作完成;
•synchronizing:一个特殊的虚拟机操作,要求虚拟机内的其它线程保持等待状态。
虚拟机的Mutex和Monitor目前没有被线程持有。Mutex是虚拟机内部的锁,而Monitor则关联到了Java对象。
然后gc信息
最后是系统信息,主要看看swap(虚拟内存)有没有被使用

猜你喜欢

转载自l7980.iteye.com/blog/2359211