使用MAT来进行java内存问题的简单分析总结

访客 阅读:163 2021-09-14 19:17:35 评论:0
本文章主要介绍了使用MAT来进行java内存问题的简单分析,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

  使用IBM的MAT工具,java内存泄露,内存溢出等问题可以简单的分析出原因。关注点是占内存最多的几个对象,对象实例数最多的几个对象。

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

  当线上环境出现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 独立版本(建议),下载地址:IT虾米网,下载解压后就可以直接用。

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

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

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

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

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

   模拟产生hprof文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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文件在项目工程目录下(或指定导出目录:-XX:HeapDumpPath)。

  打开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


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们