文档章节

jvm crash分析工具

xpbob
 xpbob
发布于 09/23 23:46
字数 982
阅读 773
收藏 14

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。

CrashAnalysis

这是一款诊断工具。是某APM项目组成员编写,里面把常见的问题分类并且给出解决方案或者方向,帮助我们定位问题。 下面是github地址,大家喜欢的话可以点个星。
https://github.com/xpbob/CrashAnalysis

工具使用方法

运行方式

通过执行jar命令,把log作为参数输入 java -jar CrashAnalysis-1.0-SNAPSHOT.jar ${hs_err_pid.log}

项目里默认带了一个编译好的jar包,如果jdk版本不适合,可以自己下载项目重新编译一版。

借助分析

诊断信息栏目

运行完成后,会有诊断信息的tab页,里面会告诉我们分析结果。 例如

这是一个解释器的问题,就是jvm把字节码转化成机器码出错了。 引起这种情况的原因有很多,一般都是jdk的bug 可以更换不同的jvm模式 例如-XInt,纯解释模式 在运行过程信息中有编译情况,可以查看具体编译到谁出错了 可以通过排除编译这些类来试试

这事分析的结果,指明了问题的原因是字节码转化机器码执行出错。而且给了建议,更改jvm模式,jdk模式是混合的,可以选择纯解释或者纯编译的模式来尝试运行。

可能的问题点

这个tab里列出的是jvm挂掉的原因,这里出现的内容主要是对log的解析,把当时jvm自己认为出错的点列举出来。我自己运行的结果是

问题模块: C 0x0000000764928700 异常模块: SIGSEGV (0xb) at pc=0x0000000764928700, pid=2788, tid=47906392385280

是一个c的模块的问题,后面跟的是地址,一般这种表述jvm解释出来的机器码。这里可以验证上面的分析。

线程信息模块

这个模块展示了当时运行的线程栈和正在运行的线程是什么。这里展示的就是线程信息,我这里不展示了。因为这个需要根据业务来匹配分析,通用性不大。

运行过程信息

这个模块的量特别大,也是特别要关注的地方。这里会列出jvm代码运行的错误(如果有的话),我们可以根据这里列出的异常来找到openjdk的源码,然后对应执行的内容,看看是否有参数可以规避。

这个模块还会列出编译事件,如果是jit带来的问题,他会把当时在编译哪些类列出来,在解释模式能解决问题的时候,可以选择禁用编译这里列举的类,或者也是一种解决思路。

系统信息

暂时只在这个模块看到内存情况,主要是用来分析内存使用问题的。这个具体情况具体分析,例如物理内存不够的时候,jvm申请不到内存,也会crash。

总结

虽然工具给了诊断内容和可靠的信息,但是这个只能辅助我们去找原因和解决方案,例如是jvm的问题,我们还是要借助线程信息以及运行过程信息来确认jvm的代码是否真的有问题。

© 著作权归作者所有

共有 人打赏支持
xpbob
粉丝 96
博文 85
码字总数 67859
作品 0
高级程序员
加载中

评论(4)

xpbob
xpbob

引用来自“梧桐宇宇”的评论

可以截个图啥的?方便使用呀
运行太简单了,一个命令就出结果了。所以就贴了模块的内容
梧桐宇宇
梧桐宇宇
可以截个图啥的?方便使用呀
xpbob
xpbob

引用来自“红薯”的评论

代码放码云上,我们推荐下吧?:)
感谢,https://gitee.com/xpbob_admin/CrashAnalysis
红薯
红薯
代码放码云上,我们推荐下吧?:)
xpbob/CrashAnalysis

CrashAnalysis 功能介绍 这是一个jvm crash分析工具,主要分析jvm crash的原因,以及常见的解决手段。 使用方式 java -jar CrashAnalysis-1.0-SNAPSHOT.jar ${hserrpid.log} ${hserrpid.log}...

xpbob
09/24
0
0
【转】Java Crash原因汇总

如果是Java进程不知道什么原因退出或被杀死,想要分析具体原因,一般来说分下面几步: 1. 拿到Java应用程序的日志文件 2. 查找JVM的致命错误日志 3. 查找操作系统的core dump文件 4. 使用Dtr...

mj4738
2011/12/04
0
0
利用 Java dump 进行 JVM 故障诊断

引言 对于大型 java 应用程序来说,再精细的测试都难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。...

candies
2014/03/03
0
0
java fatal error log

翻译于《Troubleshooting Guide for JavaSE6 with HotSpotVM》 1. 生成位置 -XX:ErrorFile=/fullpath/file,file里可以包含%p表示进程id。如果没声明,默认的名字是hserrpid.log,保存在进程...

yingtju
06/29
0
0
IBM和SAP开源其JVM诊断工具

IBM最近发布了其Java诊断工具套件,该套件包含如下工具:面向Java的产品转储分析器(Dump Analyzer)、处理垃圾收集(GC,即Garbage Collection)的Extensible Verbose Toolkit和Java锁分析器...

JavaGG
2010/03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
24分钟前
1
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
13
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部