JVM调优最重要的是通过分析dump文件。dump文件有两种,一种是heap dump文件,另一种是thread dump文件。heap dump文件是某一时刻JVM堆存储的快照,是一种镜像文件,用来记录某一时刻内存信息,包括内存的占用,使用率以及GC方式等。而thread dump是记录某一时刻cpu信息,主要是线程的执行情况等,例如某一时刻线程执行到哪个类的哪个方法上了。heap dump文件是需要利用命令jhat去分析的,而thread dump是文本文件,可以直接查看。
拿到heap dump文件的方式有两种。一种是给JVM设置启动参数 XX:+HeapDumpOnOutOfMemoryError,这样JVM在出现OOM的时候会自动生成heap dump文件。而另一种就是使用jmap命令了。这里主要总结一下jmap命令的用法。
jmap命令不仅可以用来生成heap dump文件,还可以用来直接查询finalize执行队列,堆内存的使用率以及GC方式等。
jmap命令格式为: jmap [option]
option为参数,参数不同,功能也不同。option主要有:
1.heap 显示java堆详细信息。
2.histo 显示堆中对象的统计信息。
3.permstat 堆中永久代中类的统计信息,由于JDK1.8之后取消的永久代,所以该参数在之后的JDK版本中无效。
4.finalizerinfo 显示finalize队列的执行情况。
5.dump 生成堆存储快照,即heap dump文件。
6.F 当 -dump参数没有响应时,强制生成dump快照。
主要用法示例: