文档章节

jvm crash分析工具

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

介绍一款非常好用的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
粉丝 98
博文 91
码字总数 73081
作品 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
探秘手淘高可用度量指标及数据平台

即日起至12月19日,每周三公众号将推出手淘高可用平台分享系列文章,全方面介绍手淘技术团队性能和稳定性系统化提升方案EMAS-MOTU的设计原理以及实现思路。 本文重点介绍手淘高可用平台的定义...

安卓绿色联盟
12/06
0
0
为什么 Java 会 Crash?

这份 PPT 是来自阿里巴巴淘宝核心技术组的莫枢。它讲述了 JVM 崩溃的各种情况,崩溃的原因,以及如何调试 JVM 崩溃。值得收藏,推荐! Java Crash分析(2012-05-10) View more presentation...

虫虫
2012/05/05
4.3K
13

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
11
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部