最近在生产上出现了一次oom,服务器一天爆一次,怀疑内存泄露了,
于是使用Eclipse Memory Analysis Tools工具进行查找
1.先获取内存信息文件
查看程序的pid: jps -l
转储内存文件 : jmap -dump:live,format=b,file=heap.hprof 1111
live:活动的;b:表示二进制格式;heap.hprof 文件名.hprof文件后缀;
1111:程序pid
2.安装MAT
在eclipse中点击help->Eclipse Marketplace 输入MAT,搜索下载Memory Analyzer
3.导入内存信息文件hprof开始查找
导入前最好建一个文件夹放刚才的.hprof文件,因为导入后会生成很多文件
在eclipse的File->Open File 导入刚才的文件
finish后会有一个报告看
4.开始找问题
看泄露报告提示的问题点击下方的class 查找包含的引用
打开后,红色框class Name可以用正则匹配类名,shallow heap表示对象自身占用的内存大小,
retained heap表示对象直接或者间接引用的对象大小总和 点击可以进行大小排序
然后点击某个实例,右击path to GC Roots->exclue all phantom/weak/soft etc. refecence 查看未能被回收的实例
然后发现出现问题的类,点击进去查看未被释放的类,然后回到代码中修改
我这问题比较明显,比较容易找出。以下链接更全面
mat(Eclipse Memory Analyzer tool)之二--heap dump分析 - duanxz - 博客园