获取dump文件
1、获取head dump文件
heap dump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。
获取dump文件命令如下:
jmap -dump:format=b,file=<file> <PID>
# 例如
jmap -dump:format=b,file=heap.hprof 2576
# 如果只需要导出存活的对象
jmap -dump:live,format=b,file=heapLive.hprof 2576
2、获取thread dump文件
thread dump文件主要保存的是java应用中各线程在某一时刻的运行的位置,即执行到哪一个类的哪一个方法哪一个行上。
获取thread dump命令如下:
jstack <PID> > <file>
# 例如
jstack 2576 > thread.txt
分析dump文件
1、使用jdk自带的工具
jhat是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。
分析dump文件命令如下:
jhat -port <port>
# 例如
jhat -port 9010 heapLive.hprof
或者
使用jvisualvm.exe界面打开
2、使用eclipse MAT工具
一般来说,应用程序的dump文件都是很大的,jdk自带命令难以分析这些大文件。在实际的生产环境下,我们必须要借助第三方工具,才能快速打开这些大文件,进行分析定位。
eclipse memory analyzer是一款优秀的heap分析工具,能够帮我们快速定位内存泄露问题。