系列文章目录
第一章 JVM 排查问题命令汇总
目录
4.1 内存整体使用报告(点击System Overview)
4.2.1 Shortest Paths To the Accumulation Point (GC root到聚集点的最短路径,就是持有可能泄漏内存对象的最近一层)
4.2.2 Accumulated Objects in Dominator Tree (对象聚集详情,这个地方我们经常用来看完整的reference chain)
4.2.3 Accumulated Objects by Class in Dominator Tree (这里能找到被聚集的对象实例的类名,可以看到某个类被实例化多少次)
4.2.4 All Accumulated Objects by Class (比第三个更细 具体到类的属性)
1.明确分析目标及分析指标
目标:oom原因
指标:大对象,重复创建对象(最多实例的类),oom的线程,内存泄漏,类加载情况
2.分析工具对比(jvisualvm,jhat,mat)
jvisualvm :jdk自带工具,不过分析不出来啥
jhat :jdk的命令,在命令行中分析,命令较少也分析不出来啥。
mat: eclipse推出的内存分析工具,可以使用插件也可以独立安装,有丰富的功能可以使用。
3.MAT的功能介绍
3.1 大功能模块
Histogram : 直方图,可以查看每个类的实例(即对象)的数量和大小。
Dominator: 支配树,列出Heap Dump中处于活跃状态中的最大的几个对象,默认按 retained size进行排序,因此很容易找到占用内存最多的对象
Top Consumers:按类、类加载器和包分别进行查询,并以饼图的方式列出最大的几个对象
Duplicate Classes: 列出被加载多次的类,结果按类加载器进行分组,目标是加载同一个类多次被类加载器加载。使用该工具很容易找到部署应用的时候使用了同一个库的多个版本
3.2小功能(右键或单机)
list objects:
— with outgoing references : 查看这个对象持有的外部对象引用。
— with incoming references : 查看这个对象被哪些外部对象引用。
show objects by class :
— with outgoing references :查看这个对象类型持有的外部对象引用
— with incoming references :查看这个对象类型被哪些外部对象引用
paths to gc root : 显示不同类型引用(上文中提到的Strong ,soft,weak )到跟节点的路径。
merge shorest path to gc root : 合并最短路径到root节点
java basics:
— classloader 该对象对应的classloader信息 。
— thread details :线程信息
— thread stacks :线程堆栈
— find String : 在这个对象中查询需要的字符串(还不确定,需要再搞下)
— group by : 根据某个字段统计出现的个数
4.使用方法(只介绍自动分析)
打开dump文件,选择自动分析分析完成后自动打开Reports