原标题:Java-100天知识进阶-JVM调优工具-第三方工具-知识铺

JVM调优工具,第三方工具篇:

java命令内存优化 java内存优化工具_eclipse

第三方JVM调优及性能排查工具还是不少,以后会慢慢分享出来。

今天先讲讲 MAT

一、MAT

介绍: 一个基于Eclipse的内存分析工具,以eclipse插件的形式来安装。可以提供内存泄漏和内存消耗问题,快速分析定位问题。

特点: 分析速度快,准确找到对象大小,以及为什么没有GC,更有直观的报表呈现给定位问题者。

方便:内存泄漏是很难定位问题,MAT可以很轻松,甚至是一键定位大问题点,并生成一个很专业的分析报告。

第一步:下载Eclipse MAT

下载地址: https://www.eclipse.org/mat/downloads.php

java命令内存优化 java内存优化工具_JVM_02

第二步: 安装eclipse

java命令内存优化 java内存优化工具_JVM_03

第三步:安装插件

当然你也可以进入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

java命令内存优化 java内存优化工具_eclipse_04

java命令内存优化 java内存优化工具_JVM_05

主要查看以下指标:

5.1 Histogram:列出内存中的对象,对象的个数以及大小,查询的时候很方便,可以支持正则表达式。这个列表清晰展现出实例,有多少个,占用内存总大小。

java命令内存优化 java内存优化工具_JVM_06

5.2 Dominator Tree:列出最大的对象以及其依赖存活的Object ,使用Retained Heap 进行倒排序,方便列出依赖对象占用空间大小,比例等。

java命令内存优化 java内存优化工具_java 内存工具_07

5.3 Top Consumers : 通过图形列出最大的object

java命令内存优化 java内存优化工具_JVM_08

5.4 duplicate classes :检测由多个类装载器加载的类

5.5 Leak Suspects :通过MA自动分析泄漏的原因。

5.5.1.查询内存消耗的对象

5.5.2 分析问题点 点击“Details ”链接,可以看到对象的详细分析报告

5.5.3 查询到有个很消耗内存的对象

java命令内存优化 java内存优化工具_java命令内存优化_09

点击 java.util.vector

java命令内存优化 java内存优化工具_JVM_10

对象中有个大量对象,Person , 由于引用还在,GC也没办法GC掉,这个vector会持续增长。

接下来就是处理这里业务层面导致的使用不当问题,然后进行处理,到这里,问题已经全部定位完成。

5.6 Top Components: 通过图形列出最大的object。

5.7 Component Report:分析对象属于同一个包或者被同一个类加载器加载。

5.8 分析引用栈,找到无效引用,打开源码,可以看大那些是无用的引用,处理掉。