您当前的位置: 首页 > 

顧棟

暂无认证

  • 1浏览

    0关注

    227博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用MAT进行内存问题定位

顧棟 发布时间:2022-06-08 15:58:09 ,浏览量:1

文章目录
    • MAT简介
    • 如何使用MAT
      • 1、如何找到占用内存多的java进程号
      • 2、使用jmap生成java程序的当前堆快照
      • 3、利用MAT生成报告
    • 报告解读
      • 系统视图报告 System_Overview.zip
      • 内存泄露检测报告 Leak_Suspects.zip
      • 分析对象属于同一个包或者被同一个类加载器加载Top_Components.zip

MAT简介

MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存泄漏的原因。

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

http://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html --官网使用教程

可调参数

文件名称:MemoryAnalyzer.ini

参数-Xmx 6144m

参数-data

如何使用MAT 1、如何找到占用内存多的java进程号

使用Linux的top命令 在这里插入图片描述

2、使用jmap生成java程序的当前堆快照
jmap -dump:format=b,file=java_pid718.hprof 718
./jmap -dump:format=b,file=/opt/logs/java_pid27258.hprof 27258

Q: well-known file is not secure

A:pid的启动用户不是当前用户,需要切换到启动用户下执行jmap即可

3、利用MAT生成报告

相关命令: ./ParseHeapDump.sh javapid_6838.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

会产生三个文件夹java_pid718_Leak_Suspects.zip java_pid718_System_Overview.zip java_pid718_Top_Components.zip

**浅堆 shallow heap **

指对象本身占用内存的大小 不包括内部引用对象的大小。

深堆 retained heap

一个对象的深堆指的是通过g该对象的反问道的所有对象的浅堆之和,即对象被回收后,可以释放的真实空间。

报告解读 系统视图报告 System_Overview.zip

在这里插入图片描述

  • Thread Overview

在Thread Overview视图可以看到:线程对象/线程栈信息、线程名、Shallow Heap、Retained Heap、类加载器、是否Daemon线程等信息 在这里插入图片描述

  • Top Consumers 在这里插入图片描述 通过图形列出最大的object

  • Class Histogram 在这里插入图片描述 该视图以Class类的维度展示每个Class类的实例存在的个数、 占用的 [Shallow内存] 和 [Retained内存] 大小

  • Heap Dump Overview

  • System Properties

内存泄露检测报告 Leak_Suspects.zip

内存泄露的概念: 1、内存泄露的这些对象是从GC root可达的,从GC root存在通路可以与其相连 2、这些对象是无用的,即程序以后不会再使用这些对象 至于怎么定义程序不会再使用的对象,那就要看具体的程序逻辑了,说白了内存泄露就是该回收的内存没有被回收

MAT工具分析了heap dump后在界面上非常直观的展示了一个饼图,该图深色区域被怀疑有内存泄漏。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

分析对象属于同一个包或者被同一个类加载器加载Top_Components.zip
关注
打赏
1663402667
查看更多评论
立即登录/注册

微信扫码登录

0.0596s