JVM (三).虚拟机性能监控&故障处理工具
1.概述
系统定位问题,需要工具来导出出现问题的数据;这里的数据有异常堆栈,虚拟机日志,垃圾回收日志,线程快照,堆快照文件;工具就很多就是虚拟机自带工具或者第三方解析工具;
2.基础工具
在目录JAVA_HOME/bin/
内
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情况
主要是:内存监控 虚拟机各个区域的内存使用GC 情况
;线程监控这个有点类似于 jstack
,下方还有死锁的检测
3.2 VisualVM
All-in-One Java Troubleshooting Tool
是功能最强大的运行监视和故障处理程序之一,很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具
如果电脑配置了环境变量;直接输入jvisualvm
可以直接打开,连接上自己的应用,查看应用运行的JVM
的状态;还具有很多功能丰富的插件;
3.3 MAT
Eclipse 的 Memory Analyzer Tool (MAT);个人用的还是比较多,一般用户查看内存泄漏的问题;直接加载内存快照,点击内存占用比较多的对象;
下载地址 https://www.eclipse.org/mat/previousReleases.php