码迷,mamicode.com
首页 > 其他好文 > 详细

MAT(Memory Analyzer tool)使用

时间:2018-05-12 16:46:28      阅读:1098      评论:0      收藏:0      [点我收藏+]

标签:下载   main   out   bsp   ima   对象   9.png   结果   lis   

当线上环境出现OOM/内存泄漏了,怎么办?

让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,配置-XX:+HeapDumpOnOutOfMemoryError,

当出现OOM时,分析dump下来的hprof文件,一般使用MAT辅助查看。

 

安装方式:

1 eclipse安装MAT插件;安装说明:https://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html

2 独立版本(建议),下载地址:http://www.eclipse.org/mat/downloads.php,下载解压后就可以直接用。

技术分享图片

 

 

分析一个堆转储文件需要消耗堆空间,需要分配内存,

MemoryAnalyzer.ini中的参数一般默认为-vmargs– Xmx1024m;

当dump文件的大小大于配置的1024m,会报错;

方式1:修改启动参数 MemoryAnalyzer.exe-vmargs -Xmx4g

方式2:编辑文件 MemoryAnalyzer.ini,修改/添加参数 -vmargs– Xmx4g

 

 模拟产生hprof文件:

public class OOMTest {
    public static void main(String[] args) {
        List<Person> list1 = new ArrayList<>();
        for (Long i = 0L; i < 1000L; i++) {
            list1.add(new Person(i, i.toString(), i.toString()));
        }

        List<Shop> list2 = new ArrayList<>();
        for (long i = 0L; i < 256L * 1024L * 1024L; i++) {
            list2.add(new Shop(i));
        }
    }

    static class Person {
        private Long id;
        private String name;
        private String idcard;

        public Person(Long id, String name, String idcard) {
            this.id = id;
            this.name = name;
            this.idcard = idcard;
        }
    }
}

  

 修改相关参数,这里加上了 -XX:+HeapDumpOnOutOfMemoryError -Xmx256M

 技术分享图片

执行后:

技术分享图片

 

dump下来的hrof文件在项目工程目录下。

 

打开MAT工具,File >> Open Heap Dump...

技术分享图片

 

通过分析结果,很容易知道哪些对象占用了大量的堆内存。

 

 MAT会把分析结果打包成zip包,解压后通过浏览器就可以访问。

技术分享图片

 

打开对象依赖关系树形视图

技术分享图片

 

相关链接:

http://seanhe.iteye.com/blog/898277

http://www.blogjava.net/rosen/archive/2010/06/13/323522.html

https://blog.csdn.net/rachel_luo/article/details/8992461

MAT(Memory Analyzer tool)使用

标签:下载   main   out   bsp   ima   对象   9.png   结果   lis   

原文地址:https://www.cnblogs.com/ken-jl/p/9029057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!