JVM (三).虚拟机性能监控&故障处理工具

1.概述

系统定位问题,需要工具来导出出现问题的数据;这里的数据有异常堆栈,虚拟机日志,垃圾回收日志,线程快照,堆快照文件;工具就很多就是虚拟机自带工具或者第三方解析工具;

2.基础工具

在目录JAVA_HOME/bin/

JVM(三).虚拟机性能监控故障处理工具-编程知识网

2.1 jps

jps: (JVM Precess Status)虚拟机进程状况工具:列出正在运行的虚拟机进程,并显示主类;

jps 命令格式

jps  [options] [hostid]
Options 作用
-q 只输出LVMID 省略主类的名称
-m 给主类 mian() 方法的参数
-l 主类全名,如果是jar包 则是jar包地址
-v 启动时 JVM 参数
[root@CentOSA ~]# jps -q
1424
129685
77724
1742
[root@CentOSA ~]# jps -m
1424 QuorumPeerMain /package/zookeeper/bin/../conf/zoo.cfg
129700 Jps -m
77724 KafkaEagle start
1742 Kafka config/server.properties
[root@CentOSA ~]# jps -l
1424 org.apache.zookeeper.server.quorum.QuorumPeerMain
129712 sun.tools.jps.Jps
77724 org.apache.catalina.startup.KafkaEagle
1742 kafka.Kafka
[root@CentOSA ~]# jps -v
1424 QuorumPeerMain -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote -Dcom.sun.management.j
mxremote.local.only=false129725 Jps -Denv.class.path=.:/usr/local/jdk/jdk1.8.0_51//lib/tools.jar:/usr/local/jdk/jdk1.8.0_51//lib/dt.jar: -Dapplication.home=/
usr/local/jdk/jdk1.8.0_51 -Xms8m77724 KafkaEagle -Djava.util.logging.config.file=/package/kafka-eagle/kms/conf/logging.properties -Djava.util.logging.manager=org.ap
ache.juli.ClassLoaderLogManager -Xmx1g -Xms1g -XX:MaxGCPauseMillis=20 -XX:+UseG1GC -XX:MetaspaceSize=128m -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/package/kafka-eagle/kms -Dcatalina.home=/package/kafka-eagle/kms -Djava.io.tmpdir=/package/kafka-eagle/kms/temp1742 Kafka -Xmx1G -Xms1G -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent-Djava.awt.headless=true -Xloggc:/package/kafka/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=7788 -Dkafka.logs.dir=/package/kafka/bin/../logs -Dlog4j.configuration=file:./bin/../config/log4j.properties

2.2 jstat

jstat: JVM Statistics Monitoring Tool :监视虚拟机运行状态信息的命令行工具

jstat 命令格式:

jstat [option vmid [interval[s|ms] [count]]
Options 作用
-class 虚拟机加载的类信息
-gc 堆信息检测 垃圾回收信息
-gcutil -gc 信息差不多 百分比形式
-gccause 上次gc 原因
。。。 。。。。
[root@CentOSA ~]# jps -l
1424 org.apache.zookeeper.server.quorum.QuorumPeerMain
3512 sun.tools.jps.Jps
77724 org.apache.catalina.startup.KafkaEagle
1742 kafka.Kafka
[root@CentOSA ~]# jstat -gc 1424 100 10  // 1424 pid 100ms 一次 总共10次S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   6986.6   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   7055.9   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   7055.9   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   7055.9   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
512.0  512.0  512.0   0.0   15360.0   7074.3   20480.0     5191.8   11008.0 10679.9 1280.0 1198.4     58    2.944   0      0.000    2.944
[root@CentOSA ~]# jstat -gcutil 1424 100 10S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944
100.00   0.00  47.29  25.35  97.02  93.63     58    2.944     0    0.000    2.944

2.3 jinfo

jinfo: Configuration Info for Java :实时查看和调整虚拟机各种参数

jinfo命令格式:

jinfo [option ] pid
[root@CentOSA ~]# jinfo 1424
Attaching to process ID 1424, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.51-b03
Java System Properties:java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.51-b03
..........
VM Flags:
........

2.4 jmap

jmap : Memery Map for Java :堆内存快照 heapdump /dump

jmap 命令格式:

Options 作用
-dump 生成堆快照
-finallizerinfo F-Queue 信息
-heap Linux 有效 Java 堆信息
-histo 堆里面对象的统计信息 类实例数量,合计容量
-F -dump 没有响应的时候 强制生成
C:\Users\sff>jmap -dump:format=b,file=test.bin 19140
Dumping heap to C:\Users\sff\test.bin ...
Heap dump file created

2.5 jhat

jhat: JVM Heap Analysis Tool :解析堆内存快照 dump 文件

jhat命令格式:

jhat [文件]
C:\Users\sff>jhat test.bin
Reading from test.bin...
Dump file created Sun Jan 23 22:32:09 CST 2022
Snapshot read, resolving...
Resolving 118891 objects...
Chasing references, expect 23 dots.......................
Eliminating duplicate references.......................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
访问地址: http://localhost:7000/

2.6jstack

jstack : Stack Trace for Java :生成当前虚拟机线程快照

jstack 命令格式:

jsatck [option] pid
Options 作用
-F 输出不响应 强制响应
-l 除了堆栈 还有锁信息
-m 本地方法的时候 还可以显示C/C++

2.7 其他命令

命令 作用
java 运行命令 运行Class文件或者jar包
javac 编译工具
javap 字节码分析工具 反编译

3.可视化故障处理工具

3.1 JConsole

Java Monitoring and Management Console Java监视与管理控制台;基于JMX的可视化工具,通过JMX 管理MBean;

通过pid 或者类名连接上自己想看的服务运行的JVM情况

JVM(三).虚拟机性能监控故障处理工具-编程知识网

主要是:内存监控 虚拟机各个区域的内存使用GC 情况;线程监控这个有点类似于 jstack,下方还有死锁的检测

JVM(三).虚拟机性能监控故障处理工具-编程知识网

3.2 VisualVM

All-in-One Java Troubleshooting Tool是功能最强大的运行监视和故障处理程序之一,很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具

如果电脑配置了环境变量;直接输入jvisualvm 可以直接打开,连接上自己的应用,查看应用运行的JVM 的状态;还具有很多功能丰富的插件;

JVM(三).虚拟机性能监控故障处理工具-编程知识网

3.3 MAT

Eclipse 的 Memory Analyzer Tool (MAT);个人用的还是比较多,一般用户查看内存泄漏的问题;直接加载内存快照,点击内存占用比较多的对象;
下载地址 https://www.eclipse.org/mat/previousReleases.php