jvm crash 的崩溃日志分析及注意点
生成
1. 生成error 文件的路径:你可以通过参数设置-XX:ErrorFile=/path/hs_error%p.log, 默认是在java运行的当前目录[default: ./hs_err_pid%p.log]
2. 参数-XX:OnError 可以在crash退出的时候执行命令,格式是-XX:OnError=“string”, <string> 可以是命令的集合,用分号做分隔符, 可以用"%p"来取到当前进程的ID.
例如:
// -XX:OnError="pmap %p" // show memory map
// -XX:OnError="gcore %p; dbx - %p" // dump core and launch debugger
在linux中系统会fork出一个子进程去执行shell的命令,因为是用fork可能会内存不够的情况,注意修改你的 /proc/sys/vm/overcommit_memory 参数,不清楚为什么这里不使用vfork
3. -XX:+ShowMessageBoxOnError 参数,当jvm crash的时候在linux里会启动gdb 去分析和调式,适合在测试环境中使用。
?
什么情况下不会生成error文件
linux 内核在发生OOM的时候会强制kill一些进程, 可以在/var/logs/messages中查找
?
Error crash 文件的几个重要部分
a. 错误信息概要
?
thread??jvm 会通过寄存器的值对找对应的对象,也是一个比较好的参考?
?
e. 其他的信息
error 里面还有一些线程信息,还有当时内存映像信息,这些都可以作为分析的部分参考
?
crash 报告可以大概的反应出一个当时的情况,特别是在没有core dump的时候,是比较有助于帮助分析的,但如果有core dump的话,最终还是core dump能快速准确的发现问题原因。
?
?