Jvm故障分析命令
1 jps: 查看虚拟机进程状况
选项
作用
-l
输出主类全名,如果是jar包,则输出包路径(第一列为进程号,后面都需用到)
-v
输出虚拟机进程启动时的 JVM 参数
-m
输出虚拟机进程启动时传递给主类 main()函数的参数
2 jmap: java内存映像工具
语法:
options****选项
选项
作用
-dump
生成dump文件
-finalizerinfo
以ClassLoader为统计口径输出永久代的内存状态信息
-heap
输出整个堆空间的详细信息,包括GC的使用、堆配置信息,以及内存的使用信息等
-histo
输出堆空间中对象的统计信息,包括类、实例数量和合计容量
-histo[:live]
输出堆空间中对象的统计信息,包括类、实例数量和合计容量,如果live子参数加上后,只统计活的对象数量。
比如pid为1111,使用时: jmap -histo:live 1111
-permstat
以ClassLoader为统计口径输出永久代的内存状态信息
-F
当虚拟机进程对-dump选项没有任何响应时,强制执行生成dump文件
jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。
2.1 jmap -heap pid
输出jvm参数说明
显示Java堆的如下信息:
被指定的垃圾回收算法的信息,包括垃圾回收算法的名称和垃圾回收算法的详细信息。
堆的配置信息,可能是由命令行选项指定,或者由Java虚拟机根据服务器配置选择的。
堆的内存空间使用信息,包括分代情况,每个代的总容量、已使用内存、可使用内存。如果某一代被继续细分(例如,年轻代),则包含细分的空间的内存使用信息。
2.2 jmap -histo[:live]
显示Java堆中对象的统计信息,包括:对象数量、占用内存大小(单位:字节)和类的完全限定名。比如:
要获得某个对象的大小,可以将其总大小除以该对象类型的数量。如果指定了live参数,则只计算活动的对象。比如:
2.3 jmap -clstats
显示Java堆中元空间的类加载器的统计信息,包括:
l class_loader:当Java虚拟机运行时,类加载器对象的地址
l classes:已加载类的数量
l bytes:该类加载器加载的所有类的元数据所占的字节数
l parent_loader:父类加载器对象的地址,如果没有显示null。
l alive:是否存活的标识,表示类加载器对象是否将被垃圾回收。
l type:该类加载器的类名。
2.4 jmap -finalizerinfo
显示在F-Queue中等待Finalizer线程执行finalize方法的对象。比如:
2.5 jmap -dump:[live,]format=b,file=
生成Java虚拟机的堆转储快照dump文件。具体说明如下:
live参数是可选的,如果指定,则只转储堆中的活动对象;如果没有指定,则转储堆中的所有对象。
format=b表示以hprof二进制格式转储Java堆的内存。
file=
比如
jmap -dump:live,format=b,file=heap.hprof 29325 在当前路径生成 29325 进程的堆转储快照
生成 heap.hprof 文件后,则可以拷贝出来,通过 IntelliJ IDEA 的 Profiler 插件分析该文件。
2.6 jmap -F
强制模式。如果指定的pid没有响应,可以配合-dump或-histo一起使用。此模式下,不支持live参数。比如:
3 jstat:查看虚拟机统计信息
选项
作用
-gc
监视 java 堆情况,包括 Eden 区、2个 Survivor 区、老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息
-gcutil
监视内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比
jstat -gc 2083
l S0C:第一个幸存区的大小
l S1C:第二个幸存区的大小
l S0U:第一个幸存区的使用大小
l S1U:第二个幸存区的使用大小
l EC:伊甸园区的大小
l EU:伊甸园区的使用大小
l OC:老年代大小
l OU:老年代使用大小
l MC:方法区大小
l MU:方法区使用大小
l CCSC:压缩类空间大小
l CCSU:压缩类空间使用大小
l YGC:年轻代垃圾回收次数
l YGCT:年轻代垃圾回收消耗时间
l FGC:老年代垃圾回收次数
l FGCT:老年代垃圾回收消耗时间
l GCT:垃圾回收消耗总时间
jstat -gcutil 2
l S0:幸存1区当前使用比例
l S1:幸存2区当前使用比例
l E:伊甸园区使用比例
l O:老年代使用比例
l M:元数据区使用比例
l CCS:压缩使用比例
l YGC:年轻代垃圾回收次数
l FGC:老年代垃圾回收次数
l FGCT:老年代垃圾回收消耗时间
l GCT:垃圾回收消耗总时间
4 jinfo:查看 java 配置信息
· jinfo -flag MetaspaceSize 9999
查看 MetaspaceSize 参数值(128M)
5 jstack:java 堆栈跟踪工具
选项
作用
-F
当正常输出的请求不被响应时,强制输出线程堆栈
-l
除堆栈外,显示关于锁的附加信息
-m
如果调用到本地方法,可以显示 C/C++ 的堆栈
实际过程中可以通过调用 java.lang.Thread 中的 getAllStackTraces() 方法达到 jstack -l 的效果。
6 jcmd:多功能工具
选项
作用
-l
列出当前运行的所有虚拟机
help
可列出该虚拟机支持的所有命令
Thread.print
打印堆栈信息
GC.heap_info
查看GC 堆详细信息
GC.heap_dump /tmp/heap.hprof
导出堆信息
6.1 jcmd -l
列出当前运行的所有虚拟机:
6.2 jcmd 9999 help
可列出该虚拟机支持的所有命令(查看进程26052的相关命令):
6.3 jcmd 9999 Thread.print
打印堆栈信息
6.4 jcmd 9999 GC.heap_info
查看GC 堆详细信息:
6.5 jcmd 9999 GC.heap_dump /tmp/heap.hprof
导出堆信息:




