Java监控调优工具

Java监控调优工具

监控类工具

jps

查看运行中的 JVM 进程信息

1
2
3
[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
jstat

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

1
2
3
4
5
6
7
8
9
# 打印 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 编译方法统计信息

故障排查工具

jinfo

查看和调整 JVM 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 输出当前 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
jmap

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看进程的内存映像信息
[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
jstack

查看线程堆栈信息

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

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

jcmd

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 查看可以使用的命令
[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

可视化工具

jconsole
jvisualvm
jmc
MAT
JITWatch