1. 概述
前面几篇文章分析了 JVM 的一些概念,大部分都是偏理论的,本文介绍一些可以实操的 JVM 性能监控与分析工具。
主要包括 JDK 自带的一些常用工具,以及阿里开源的 Java 诊断工具 Arthas。
2. 性能监控与故障处理工具
2.1 JDK 自带工具
JDK 自带的几个常用工具如下:
名称 | 主要作用 |
---|---|
jps | JVM Process Status Tool, 显示指定系统内所有的 HotSpot 虚拟机进程 |
jstat | JVM Statistics Monitoring Tool, 用于收集 HotSpot 虚拟机各方面的运行数据 |
jinfo | Configuration Info for Java, 显示虚拟机配置信息 |
jmap | Memory Map for Java, 生成虚拟机的内存转储快照(heapdump 文件) |
jhat | JVM Heap Analysis Tool, 用于分析 heapdump 文件(它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果) |
jstack | Stack Trace for Java, 显示虚拟机的线程快照 |
这里只是少部分,其他更多命令可以参考官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/toc.html
2.1.1 jps: 虚拟机进程状况工具
-
命令格式
jps [ options ] [ hostid ]
-
jps
$ jps
15236 Jps
14966 Example1
-
jps -l
$ jps -l
15249 sun.tools.jps.Jps
14966 com.jaxer.jvm.egs.Example1
-
jps -m
$ jps -m
15264 Jps -m
14966 Example1
-
jps -v
$ jps -v
14966 Example1 -Dvisualvm.id=44321340563858 -Xmx50m -Xms50m -XX:+PrintGCDetails -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=61849:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
15278 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home -Xms8m
-
jps -q
$ jps -q
9938
14966
15334
2.1.2 jstat: 虚拟机统计信息监视工具
-
命令格式
jstat [option vmid [interval[s|ms] [count]] ]
-
示例 1:监控堆内存信息
$ jstat -gc 14966
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
2048.0 2048.0 0.0 0.0 12800.0 9345.8 34304.0 26638.8 5248.0 4971.3 640.0 554.9 2 0.032 2 0.049 0.082
如图所示:
参数主要是新生代、老年代的内存空间占用情况以及 GC 的次数和时间,说明如下:
S0: Survivor space 0 utilization as a percentage of the space's current capacity.
S1: Survivor space 1 utilization as a percentage of the space's current capacity.
E: Eden space utilization as a percentage of the space's current capacity.
O: Old space utilization as a percentage of the space's current capacity.
M: Metaspace utilization as a percentage of the space's current capacity.
CCS: Compressed class space utilization as a percentage.
YGC: Number of young generation GC events.
YGCT: Young generation garbage collection time.
FGC: Number of full GC events.
FGCT: Full garbage collection time.
GCT: Total garbage collection time.
官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE