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