导出内存dump
查看某个进程的内存状态:jmap -heap <pid>;
查看某个进程当前对象的占用情况,并输出到文件:jmap -histo <pid> > c://qq.txt;
导出某个进程的dump文件:jmap -dump:file=c://qq.bin <pid>,是一个二进制文件(后缀为bin/hprof ),保存了某一时刻JVM堆中对象使用情况。
导出某个进程的dump文件(只导出存活对象):jmap -dump:live,file=c://qq.bin <pid>
通常在写Heap Dump文件前会触发一次FullGC,所以Heap Dump文件中保存的是FullGC后留下的对象信息。
使用jhat分析
jhat是JDK自带的命令,用来分析java堆,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。
通过命令将dump文件内容以web的方式呈现,访问http://ip-server:7000查看:jhat -port 7000 mem.dat
使用ha分析
ha.jar是IBM提供的分析内存的工具,可以帮助我们分析dump文件。
使用MAT分析
MAT(Memory Analyzer Tool)工具是eclipse的一个插件,使用起来非常方便,尤其是在分析 大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GC Roots的相关信息,当然最吸引人的还是能够快速为开发人员生成内存泄露报表,方便定位问题和分析问题。