JVM调优工具,第三方工具篇:
![1f635c3a5657a39124c01a6d0062c751.png](https://img-blog.csdnimg.cn/img_convert/1f635c3a5657a39124c01a6d0062c751.png)
第三方JVM调优及性能排查工具还是不少,以后会慢慢分享出来。
今天先讲讲 MAT
一、MAT
介绍: 一个基于Eclipse的内存分析工具,以eclipse插件的形式来安装。可以提供内存泄漏和内存消耗问题,快速分析定位问题。
特点: 分析速度快,准确找到对象大小,以及为什么没有GC,更有直观的报表呈现给定位问题者。
方便:内存泄漏是很难定位问题,MAT可以很轻松,甚至是一键定位大问题点,并生成一个很专业的分析报告。
第一步:下载Eclipse MAT
下载地址:https://www.eclipse.org/mat/downloads.php
![34d847b63b6d479e689b04d0ac69261c.png](https://img-blog.csdnimg.cn/img_convert/34d847b63b6d479e689b04d0ac69261c.png)
第二步: 安装eclipse
![778d0fe9982efcace8a0fdd6fb072ef8.png](https://img-blog.csdnimg.cn/img_convert/778d0fe9982efcace8a0fdd6fb072ef8.png)
第三步:安装插件
当然你也可以进入eclipse,Eclipse MarketPlace搜索 “mat”找到后直接安装。
这里是导入安装模式,具体步骤:
File -> Import -> Other -> Heap Dump 然后选择Dump文件的路径,选择文件进行导入
第四步: 生成hprof
第一种: 命令法
C:甥敳獲xx>jmap -dump:format=b,file=d:/mem.hprof 12420
Dumping heap to D:mem.hprof ...
Heap dump file created
第二种: JVM参数法
这种更便捷,更实用的方法,设置JVM参数:
-XX:+HeapDumpOnOutOfMemoryError
JVM 就会在发生内存泄露时抓拍下当时的内存状态。
第五步: 启动 eclipse mat
导入 mem.hprof
![2220455fed8ad0e4cab0fa42012ae1d6.png](https://img-blog.csdnimg.cn/img_convert/2220455fed8ad0e4cab0fa42012ae1d6.png)
![2e6c011dd941eba3fdc9f6fe7e8e4a23.png](https://img-blog.csdnimg.cn/img_convert/2e6c011dd941eba3fdc9f6fe7e8e4a23.png)
主要查看以下指标:
5.1 Histogram:列出内存中的对象,对象的个数以及大小,查询的时候很方便,可以支持正则表达式。这个列表清晰展现出实例,有多少个,占用内存总大小。
![e3e59515159624dbafd41a0e9a6016be.png](https://img-blog.csdnimg.cn/img_convert/e3e59515159624dbafd41a0e9a6016be.png)
5.2 Dominator Tree:列出最大的对象以及其依赖存活的Object ,使用Retained Heap 进行倒排序,方便列出依赖对象占用空间大小,比例等。
![28d280bc9ec28f44d53e4131dd24f840.png](https://img-blog.csdnimg.cn/img_convert/28d280bc9ec28f44d53e4131dd24f840.png)
5.3 Top Consumers : 通过图形列出最大的object
![81486ab39fbddad4627d2f1bc134ec9f.png](https://img-blog.csdnimg.cn/img_convert/81486ab39fbddad4627d2f1bc134ec9f.png)
5.4 duplicate classes :检测由多个类装载器加载的类
5.5 Leak Suspects :通过MA自动分析泄漏的原因。
5.5.1.查询内存消耗的对象
5.5.2 分析问题点 点击“Details ”链接,可以看到对象的详细分析报告
5.5.3 查询到有个很消耗内存的对象
![41aa1747e6a7dcf459d7c0ce1c4dfa78.png](https://img-blog.csdnimg.cn/img_convert/41aa1747e6a7dcf459d7c0ce1c4dfa78.png)
点击 java.util.vector
![aa4fbee664641cb97e0403bee8ea242f.png](https://img-blog.csdnimg.cn/img_convert/aa4fbee664641cb97e0403bee8ea242f.png)
对象中有个大量对象,Person , 由于引用还在,GC也没办法GC掉,这个vector会持续增长。
接下来就是处理这里业务层面导致的使用不当问题,然后进行处理,到这里,问题已经全部定位完成。
5.6 Top Components: 通过图形列出最大的object。
5.7 Component Report:分析对象属于同一个包或者被同一个类加载器加载。
5.8 分析引用栈,找到无效引用,打开源码,可以看大那些是无用的引用,处理掉。
![40b6453ce97409e8cc25bfc1bde0532d.png](https://img-blog.csdnimg.cn/img_convert/40b6453ce97409e8cc25bfc1bde0532d.png)