记录: 使用MAT(Memory Analyzer Tool)分析java 内存溢出的dump文件

MAT是什么?

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

下载: https://www.eclipse.org/mat/d...
自行根据电脑选择下载的环境: 我的windows,就以windows来展开
image.png

下载完,直接解压得到mat文件
image.png

解压内容如下:
image.png

双击启动MAT内存分析工具
image.png

若出现jdk的报错: 需下载jdk11的包, 下载解压包即可, 无需更改电脑的环境配置
下载完jdk11后, 编辑image.png文件
增加内容,存放位置如图:指向刚刚下载的jdk11的路径

-vm
D:\java11\jdk-11.0.17\bin\javaw.exe

如图:
image.png

-Xmx可调大一些, 我是调了4024m, 因为当导入dump文件过大的时候会解析错误.

重新打开MAT,导入dump文件后,首页截图如下
image.png

具按钮介绍:
图片
:直方图视图,将堆中所有的内存消耗情况统计出来,其如图所示:
image.png

图片
:内存使用树状结构,以线程为维度,树状形式展开,如图所示:如图该线程占用了1.1G内存,可通过展示该线程找到执行的慢sql
image.png

图片
线程栈,可定位代码中具体执行sql的位置, 其截图如下:
image.png
image.png

image.png
根据该图,可以明确,堆的总大小为1.6G,被4个线程全部占据,导致其他线程无法再申请资源,抛出堆内存溢出错误。
通常的做法是直接去看线程栈即可直接定位到具体抛出错误的代码位置

你可能感兴趣的:(javamat内存泄漏)