定位内存泄漏的根源
java程序在运行过程中如果报出OutOfMemory异常,或者是分配内存不够,或者是程序有内存泄漏的bug,本文通过gdb和MAT(Eclipse Memory Analyzer Tool)工具来定位问题根源。
参考文章: http://blogs.atlassian.com/2013/03/so-you-want-your-jvms-heap/
使用gdb生成java heap文件
- 生成进程core文件
sudo gdb --pid=16837 ...bunch of info... (gdb) gcore /tmp/jvm.core Saved corefile /tmp/jvm.core (gdb) detach (gdb) quit
- 从进程core文件中提取出java heap文件
sudo jmap -dump:format=b,file=/tmp/jvm.hprof /usr/bin/java(要改成你自己主机上java的路径) /tmp/jvm.core
运行MAT找出内存泄漏根源
下载MAT
启动MAT并加载heap文件