[JVM_6] JVM性能监控和故障处理工具

205 阅读3分钟

总结列表

名称主要作用执行样例
jpsJVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程jps -lv 显示虚拟机参数
jstat虚拟机统计信息监视工具jstat -gcutil pid关注gc中已用空间占总空间比值
jinfoJava配置信息工具jinfo -flags pid打印出所有JVM参数
jmapJava内存映像工具jmap -dump:format=b,file=nihao.bin pid 在当前文件夹下输出dump
jhat虚拟机转储快照分析工具(一般不用)jhat xxx.bin解析dump
jstackJava堆栈跟踪工具jstack -F pid

jps:虚拟机进程状况工具

jps选项作用
-q只输出pid,没有主类名
-m显示传递给main()的参数
-l显示全路径
-v显示虚拟机参数

jstat:虚拟机统计信息监视工具

jstat选项作用
-class监视类装载,卸载数量,总空间,类加载时间
-gc监视Java堆状况
-gcutil基本与gc相同,突出各空间占用比例
-compiler输出JIT编译的方法
jstat -gcutil  2868 //关注已用空间占总空间比值
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  63.34  80.00  17.34  19.94      0    0.000     0    0.000    0.000
//S0,S1指代两个Survivor区
//E 指代Eden区
//O 代表老年代
//M MetaSpace
//CCS 压缩使用比例
//YGC youngGC次数
//YGCT youngGC时间
//FGC FullGC次数
//FGCT FullGC时间
//GCT GC时间

jinfo:Java配置信息工具

我们使用jps -v可以查看虚拟机启动时,显示指定的参数列表,但是如果想知道未被显式指定的参数的系统默认值,我们可以加上 -XX:+PrintFlagsFinal打印各个变量的默认值,也可以使用 jinfo -flags 2868实时打印出所有的JVM参数值

Attaching to process ID 2868, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.221-b11
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=10485760
-XX:MinHeapDeltaBytes=196608 -XX:NewSize=10485760 -XX:OldSize=10485760 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDet
ails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorder
edTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseSerialGC
Command line:  -XX:+UseSerialGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xms20m -Xm
x20m -Xmn10m -XX:SurvivorRatio=8 -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.1\lib\idea_rt.jar=55302:C:\Pro
gram Files\JetBrains\IntelliJ IDEA 2019.2.1\bin -Dfile.encoding=UTF-8

或者使用 jinfo -flag InitialHeapSize 2868来查看特定参数的value

jmap:Java内存映像工具

用于生成转储快照,即heapdump或者说dump文件

生成dump的几种方式

  1. 使用-XX:+HeapDumpOnOutOfMemoryError,OOM生成dump
  2. 使用-XX:+HeapDumpOnCtrlBreak按住ctrl加break生成dump,
  3. 在linux系统使用kill -3 pid 拿到dump
  4. jmap -dump:format=b,file=nihao.bin 2868
jmap -dump:format=b,file=nihao.bin 2868
Dumping heap to D:\myproject\JavaConcentration\src\main\java\com\practice\JavaString\nihao.bin ...
Heap dump file created

jhat:虚拟机转储快照分析工具

jhat搭配jmap进行使用,一般不用,简单了解下使用方法jhat xxx.bin

Reading from nihao.bin...
Dump file created Wed Dec 11 18:58:05 CST 2019
Snapshot read, resolving...
Resolving 26689 objects...
Chasing references, expect 5 dots.....
Eliminating duplicate references.....
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

打开http://localhost:7000就可以访问了

jstack:Java堆栈跟踪工具

命令虚拟机当前时刻的线程快照

选项作用
-F正常输出不被响应,强制输出堆栈,如死锁时
-l除了堆栈,输出锁的信息
-m如果调用native方法,显示C/C++的堆栈
常用jstack -F pid

接下来是图形化的两个JDK工具

Jconsole

jvisualvm

只能说太强了,这里书里图文并茂,就不说了,等到实际应用时更新