1、监控目的
Analyzer tool(MAT)分析JVM内存泄露案例

2、常用分析工具
Analyzer tool(MAT)分析JVM内存泄露案例

3、分析案例-MAT
MAT 介绍及分析:
启动MAT, 然后选择菜单项 File- Open Heap Dump 来加载需要分析的堆转储文件。文件加载完后,可以看到如图 1所示的界面:
Analyzer tool(MAT)分析JVM内存泄露案例
从图1可以看到他的大部分功能:
 Histogram 可以列出内存中的对象,对象的个数及大小
 Dominator Tree 可以列出哪个线程以及线程执行的哪些对象占用空间
 Top consumers 通过图形列出最大的object
 Leak Suspects 通过MA自动分析泄漏的原因。
Histogram 如图2:
Objects:类的对象数量
Shallow size:对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)和总和。:
Retained size:是该对象自己的shallow size+ 从该对象直接或间接访问到对象的shallow size之和。换句话说,retained size 是该对象被GC之后所能回收到内存的总和。

从图2 可以发现,java.util.HashMap 类的对象占用的很多的空间。
Analyzer tool(MAT)分析JVM内存泄露案例

Dominator Tree 如图3:
从图3 中可以发现com.csii.ibs.lc.ClusterOnlineUserRegistry 占了很多内存空间
Analyzer tool(MAT)分析JVM内存泄露案例

Top Comsumers 如图4:
显示内存中最大的对象有哪些,及其对应的类是哪些,类加载器classloader是哪些。有些时候我们在这里可以看到代码泄漏的位置。
Analyzer tool(MAT)分析JVM内存泄露案例

4、案例一则:
今天线上业务JVM监控出现有内存泄露情况
Analyzer tool(MAT)分析JVM内存泄露案例
Analyzer tool(MAT)分析JVM内存泄露案例

选择 Path To GC Roots ->exclude weak references,过滤
Analyzer tool(MAT)分析JVM内存泄露案例
然后就很直观的分析出什么导致的了,然后优化。