原标题:Java-100天知识进阶-JVM调优工具-第三方工具-知识铺
JVM调优工具,第三方工具篇:
第三方JVM调优及性能排查工具还是不少,以后会慢慢分享出来。
今天先讲讲 MAT
一、MAT
介绍: 一个基于Eclipse的内存分析工具,以eclipse插件的形式来安装。可以提供内存泄漏和内存消耗问题,快速分析定位问题。
特点: 分析速度快,准确找到对象大小,以及为什么没有GC,更有直观的报表呈现给定位问题者。
方便:内存泄漏是很难定位问题,MAT可以很轻松,甚至是一键定位大问题点,并生成一个很专业的分析报告。
第一步:下载Eclipse MAT
下载地址: https://www.eclipse.org/mat/downloads.php
第二步: 安装eclipse
第三步:安装插件
当然你也可以进入eclipse,Eclipse MarketPlace搜索 “mat”找到后直接安装。
这里是导入安装模式,具体步骤:
File -> Import -> Other -> Heap Dump 然后选择Dump文件的路径,选择文件进行导入
第四步: 生成hprof
第一种: 命令法
C:\Users\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
主要查看以下指标:
5.1 Histogram:列出内存中的对象,对象的个数以及大小,查询的时候很方便,可以支持正则表达式。这个列表清晰展现出实例,有多少个,占用内存总大小。
5.2 Dominator Tree:列出最大的对象以及其依赖存活的Object ,使用Retained Heap 进行倒排序,方便列出依赖对象占用空间大小,比例等。
5.3 Top Consumers : 通过图形列出最大的object
5.4 duplicate classes :检测由多个类装载器加载的类
5.5 Leak Suspects :通过MA自动分析泄漏的原因。
5.5.1.查询内存消耗的对象
5.5.2 分析问题点 点击“Details ”链接,可以看到对象的详细分析报告
5.5.3 查询到有个很消耗内存的对象
点击 java.util.vector
对象中有个大量对象,Person , 由于引用还在,GC也没办法GC掉,这个vector会持续增长。
接下来就是处理这里业务层面导致的使用不当问题,然后进行处理,到这里,问题已经全部定位完成。
5.6 Top Components: 通过图形列出最大的object。
5.7 Component Report:分析对象属于同一个包或者被同一个类加载器加载。
5.8 分析引用栈,找到无效引用,打开源码,可以看大那些是无用的引用,处理掉。