暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jvm故障分析命令

原创 BBK 2022-11-24
487

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=用于指定快照dump文件的文件名。

比如

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

导出堆信息:

最后修改时间:2022-11-24 11:08:42
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论