什么是jmap?
jmap是jdk自带的命令,主要用于导出堆转储文件,也可以进行jvm分代空间内存检测,以及对象大小个数排序,
可在安装的jdk->bin目录下找到,如下
为什么使用jmap?
当发生程序响应时间变长,cpu load过高,GC频繁,OOM,内存泄漏,死锁
就意味着应用出现了问题,就可以使用jmap来导出dump文件,然后对文件进行分析,从而找到问题所在。
怎么使用?
命令行输入jmap
1.jmap -heap 25536 展示堆中的配置参数以及堆中各区域的使用情况。
2.jmap -histo 25536 展示对象堆的直方图(只截取了一部分)
3.jmap -histo:live 25536 展示存活对象对象堆的直方图(只截取了一部分)
4.jmap -clstats 25536 打印类装入器统计信息
5.jmap -finalizerinfo 25536 打印调用finalize方法的对象(要调用finalize方法的对象是会放在finalize的队列当中)
6.jmap -dump:format=b,file=cc.hprof 25536 重中之重,生成dump文件
生成的文件如下
7.jmap -dump:live,format=b,file=dd.hprof 25536 生成存活对象的dump文件
补充
也可以通过配置jvm参数达到生成dump文件的需求。
1.XX:+HeapDumpOnOutOfMemoryError(当程序发生oom的时候生成dump文件)
2.XX:+HeapDumpAfterFullGC(发生fullGc之后生成dump文件)
3.XX:+HeapDumpBeforeFullGC(发生fullGc之前生成dump文件)
4.XX:HeapDumpPath=$文件目录(程序生成dump文件的具体地址,如果不配置此参数则默认生成dump文件在项目的根目录)