1. 监控类工具

1.1 jps

查看运行中的 JVM 进程信息

[root@localhost software]# jps -lvm
1548 sun.tools.jps.Jps -lvm -Dapplication.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64 -Xms8m
1501 monitor_tuning-0.0.1-SNAPSHOT.jar
参数作用
-q只显示进程号
-l显示应用 main class 的完整包名或应用的 JAR 文件的完整路径名
-m显示传递给 main 方法的参数
-v显示传递给 JVM 的参数
-V禁止输出类名,JAR 文件名和传递给 main 方法的参数,仅显示本地 JVM 标识符的列表
hostid想要查看的主机的标识符,例:jps -l rmi://remote.comain:1231
1.2 jstat

监控 JVM 统计信息,查看内存使用情况

# 打印 gc 信息,每隔 1 秒一次,打印 5 次
[root@localhost software]# jstat -gc 1501 1000 5
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
4608.0 4608.0  0.0    0.0   131072.0 120180.4  19968.0     7128.5   21296.0 20357.1 2688.0 2439.5      8    0.105   1      0.045    0.150
4608.0 4608.0  0.0    0.0   131072.0 120180.4  19968.0     7128.5   21296.0 20357.1 2688.0 2439.5      8    0.105   1      0.045    0.150
4608.0 4608.0  0.0    0.0   131072.0 120180.4  19968.0     7128.5   21296.0 20357.1 2688.0 2439.5      8    0.105   1      0.045    0.150
4608.0 4608.0  0.0    0.0   131072.0 120180.4  19968.0     7128.5   21296.0 20357.1 2688.0 2439.5      8    0.105   1      0.045    0.150
4608.0 4608.0  0.0    0.0   131072.0 120180.4  19968.0     7128.5   21296.0 20357.1 2688.0 2439.5      8    0.105   1      0.045    0.150

参数作用
-class显示有关类加载器行为的统计信息
-compiler显示有关 Java HotSpot VM Just-in-Time 编译器行为的统计信息
-gc显示有关垃圾收集堆行为的统计信息
-gccapacity显示各代容量和对应空间的统计信息
-gccause显示有关垃圾收集统计信息的摘要,以及最近和当前(适用时)垃圾收集事件的原因
-gcnew显示新生代行为的统计信息
-gcnewcapacity显示有关新生代大小及其对应空间的统计信息
-gcold显示有关老年代行为的统计信息和元空间统计信息
-gcoldcapacity显示老年代大小的统计信息
-gcmetacapacity显示有关元空间大小的统计信息
-gcutil显示有关垃圾收集统计信息的摘要
-printcompilation显示 Java HotSpot VM 编译方法统计信息

2. 故障排查工具

2.1 jinfo

查看和调整 JVM 参数

# 输出当前 JVM 进程的全部参数和系统属性
[root@localhost software]# jinfo 1501

# 查看已经被赋过值的参数
[root@localhost software]# jinfo -flags 1501
Attaching to process ID 1501, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.302-b08
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=31457280 -XX:MaxHeapSize=478150656 -XX:MaxNewSize=159383552 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 
Command line: 

# 查看对应名称的参数
[root@localhost software]# jinfo -flag MaxHeapSize 1501
-XX:MaxHeapSize=478150656

# 开启或者关闭对应名称的参数
[root@localhost software]# jinfo -flag +HeapDumpOnOutOfMemoryError 1501
-XX:-PrintGC

# 修改指定参数的值(有一些参数不允许动态修改,如最大堆内存),使用 java -XX:+PrintFlagsInitial | grep manageable 查看可动态修改的参数
[root@localhost software]# jinfo -flag HeapDumpPath=/data/software 1501
2.2 jmap

查看对象内存映射或堆内存详细信息

# 查看进程的内存映像信息
[root@localhost software]# jmap 1501

# 查看堆的详细信息
[root@localhost software]# jmap -heap 1501

* 导出堆快照文件
[root@localhost software]# jmap -dump:format=b,file=1501_heap.hprof 1501

* 查看等待回收的对象信息
[root@localhost software]# jmap -finalizerinfo 1501
Attaching to process ID 1501, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.302-b08
Number of objects pending for finalization: 0

* 查看堆中对象的统计信息
[root@localhost software]# jmap -histo:live 1501

* 查看类加载器信息
[root@localhost software]# jmap -clstats 1501
2.3 jstack

查看线程堆栈信息

[root@localhost software]# jstack 1501
[root@localhost software]# jstack 1501 > 1501_stack.txt
参数作用
-l显示有关锁的额外信息
-e显示线程的额外信息
2.4 jhat

用来分析 jmap 生成的堆 Dump,使用 VisualVM 替代

2.5 jcmd

向正在运行的 JVM 发送诊断命令请求

# 查看可以使用的命令
[root@localhost software]# jcmd 1501 help
1501:
The following commands are available:
VM.unlock_commercial_features
JFR.configure
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help

# 导出线程堆栈信息
jcmd 1501 Thread.print > 1501_thread.txt

# 导出堆内存信息
[root@localhost software]# jcmd 1501 GC.heap_dump 1501_heap_dump.txt
1501:
Heap dump file created

# 查看所有运行中的 JVM 进程信息
[root@localhost software]# jcmd -l
1948 sun.tools.jcmd.JCmd -l
1501 monitor_tuning-0.0.1-SNAPSHOT.jar

3. 可视化工具

3.1 jconsole
3.2 jvisualvm
3.3 jmc
3.4 MAT
3.5 JITWatch

Q.E.D.


盛年不重来,一日难再晨。