MAT分析内存泄露分析
博客专区 > trayvon 的博客 > 博客详情
MAT分析内存泄露分析
trayvon 发表于11个月前
MAT分析内存泄露分析
  • 发表于 11个月前
  • 阅读 22
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

简介

下面通过一个简单的例子来介绍一下mat的使用:

import java.util.LinkedList;
/**
 * -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\Java\dump
 *
 */
public class HeapDump {
    
    public static void main(String[] args) {
        LinkedList<HeapDump> list = new LinkedList<HeapDump>();
        while(true){
            list.add(new HeapDump());
        }
    }

}
java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to E:\Java\dump\java_pid2536.hprof ...
Heap dump file created [37651239 bytes in 0.219 secs]
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at cn.freemethod.inspect.HeapDump.main(HeapDump.java:14)

除了通过-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\Java\dump虚拟机参数还可以通过jmap命令来获取堆信息。 jmap -dump:live,format=b,file=E:/java/dump/heap.bin pid jmap -dump:file=E:/java/dump/heap.hprof pid

jmap命令非常有用,在线上环境是不允许使用jvisualvm这样对性能影响较大的工具的时候,并且有时候会有一些情况下不允许立即内存溢出,就可以通过jmap命令来获取堆,jmap命令也会比其他三方工具占用更少的资源。

MAT

mat概览

如上图中蓝1所示,在概览中主要是展示了对的大小,Class的多少,对象的多少,类加载器的多少。 如上图中蓝2中涉及2个概念Shallow Size和Retained Size: Shallow Size是指对象自身占用的内存大小,不包括它引用的对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。针对数组类型的对象,它的大小是数组元素对象的大小总和。 Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和 上图中蓝3是对象多少的柱状图和主要对象的链接,蓝4是可能存在泄漏的分析链接。

mat histogram

上图柱状图所表示的是对象的多少和占用的大小的排序。

mat list objects

上图是柱状图的的对象列表涉及到下面2个概念:

with outgoing reference:持有的外部对象引用

with incoming reference:被外部对象引用

with incoming

with outgoing

show object by class

如上图是是对类的查看,主要涉及下面2个概念:

by outgoing reference:持有的外部类引用

by incoming reference:被外部类引用

by incoming

by outgoing

leak suspect

上图是内存泄露可能存在的点分析定位

system overview

上图是mat中的系统信息概览,主要帮助问题定位和重现

thread overview

上图是线程的概览,帮助定位分析问题出现在哪一个线程之中。

jmap heap

上图是jmap的heap参数命令,可以查看到一下堆相关的vm参数和实时的堆的一些变化。

标签: 内存泄露 MAT
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 13
博文 116
码字总数 169452
作品 1
×
trayvon
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: