背景
我们知道jmap命令可以生成对转储快照文件,那么如何分析呢?除了jdk自带的工具(不好用,看不出来东西)
下面介绍eclipse的memory analyze tool(mat)的使用
mat可以独立于开发工具使用,是个比较方便不错的内存分析工具。
下载
下载地址:https://eclipse.org/mat/downloads.php
选择适合自己的版本,笔者选择的是mac osx版本。
使用
下载完成后是个zip包,解压后出现一个应用程序:
但是这样事不能直接打开的:
解决方式:显示包内容->contents->MacOS ,找到MemoryAnalyzer命令。
打开终端,进入到此目录下执行:./MemoryAnalyzer -data ./dump
即可成功启动。
选择 open a heap dump,打开一个dump文件进行分析
如果出现如下错误:
修改 contents/Eclipse/MemoryAnalyzer.ini 文件的
-Xmx 属性,如下:
保存后重新启动mat。
分析成功后如下:
下面有一行 leak suspects(泄漏疑点)
点击进入leak suspects查看:
这里明确指出了事哪个线程,占用了多少内存。
进入堆栈去看看详细信息:
这里指出了具体哪个类的哪个方法以及具体行数,这样就定位出了内存泄漏的具体信息了。