说明:记录一次java内存分析的办法。因为本人未使用 Eclipse进行编写代码,所以无法直接使用 eclipse 直接分析。替代方式是将dump文件直接用Memory Analyzer Tools工具进行分析。以下是步骤。
1 安装 Memory Analyzer Tools
官网地址:http://www.eclipse.org/mat/downloads.php
这个地址下载速度比较慢,而且下载服务器老是崩溃,后面在网上找了个下载包,linux_x86-64位的,如果需要可以私聊。
解压后的目录如下:
2 内存 dump 文件生成
dump文件可以是内存溢出是,自动生成的,java配置参数是 :
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/app/m.hprof
手动生成直接导出,命令如下:
jmap -dump:live,format=b,file=m.hprof ${PID}
3 分析 dump 文件
在安装路径下直接执行以下命令:
./ParseHeapDump.sh /opt/memory_analyzer/m.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
此命令会在 m.hprof 同级目录下生成许多文件,所以建议创建个新目录再执行此命令。结果如下:
4 打开分析报告
将上面的文件全部拷贝至本地,解压 .zip 文件
使用浏览器打开 index.html 文件的内容,显示如下:
至此可以分析具体原因。