【JVM】第四章 虚拟机性能监控及故障处理工具

一、概述

理论是指导实践的工具,能把理论应用到实践中去,才是我们学习的最终目的。

知识、经验是关键的基础,数据是依据,工具是运用知识处理数据的手段。

 

二、jdk自带的命令行工具集

jdk 的安装目录:

打开终端,输入:/usr/libexec/java_home -V

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

进入jdk1.8的安装的bin目录里面看一下,都有哪些好用好玩的工具:

【JVM】第四章 虚拟机性能监控及故障处理工具

进入里面发现除了javac \ java两个命令之外别的都没用过。没关系,一点一点的来。

 

三、常用监控和故障处理工具

名称    

作用

jps

JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 

jstats

JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 

jinfo

Configuration Info for Java,现实虚拟机配置信息

jmap

Memory map for java,生成虚拟机的内存转储快照

jhat

JVM heap Dunp Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务,让用户可通过浏览器查看 

jstack

Stack Track for java ,显示虚拟机线程快照

 

1、jps虚拟机进程状况工具

语法结构: jps [options] [hostid] 参数: -q 只输出ID -l 显示虚拟机执行的主类 (常用) -m 显示传给main的参数 -v 输出启动的JVM参数 (常用)

 

实现一把,看下效果:

liuyideMacBook-Air:bin liuyi$ jps -l

5202 org.apache.catalina.startup.Bootstrap (我本地起来的tomcat. 前面的5202是当前的进程ID)

5204 sun.tools.jps.Jps


 

iuyideMacBook-Air:bin liuyi$ jps -v

5202 Bootstrap -Djava.util.logging.config.file=/Users/liuyi/tools/apache-tomcat-8.5.32/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -agentlib:jdwp=transport=dt_socket,address=54321,server=y,suspend=n -Dignore.endorsed.dirs= -Dcatalina.base=/Users/liuyi/tools/apache-tomcat-8.5.32 -Dcatalina.home=/Users/liuyi/tools/apache-tomcat-8.5.32 -Djava.io.tmpdir=/Users/liuyi/tools/apache-tomcat-8.5.32/temp

5213 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home -Xms8m

 

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

用于监控虚拟机各种运行状态信息的命令行工具。它可以显示类装载、内存、垃圾收集、JIT编译等运行数据。

语法结构: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

【JVM】第四章 虚拟机性能监控及故障处理工具

liuyideMacBook-Air:bin liuyi$ jstat -gc 5202

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

0.0 1024.0 0.0 1024.0 62464.0 52224.0 67584.0 54040.9 70400.0 67741.5 8960.0 8422.4 97 1.253 0 0.000 1.253

 

liuyideMacBook-Air:bin liuyi$ jstat -gcutil 5202

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

0.00 100.00 19.35 81.00 96.45 94.01 98 1.258 0 0.000 1.258

 

liuyideMacBook-Air:bin liuyi$ jstat -class 5202

Loaded Bytes Unloaded Bytes Time

12479 23164.3 0 0.0 15.58

 

3、jinfo:java配置信息工具

实时查看和调整虚拟机各项参数。必须是-XX的参数才可以查看

jinfo -flag 参数 进程ID

 

liuyideMacBook-Air:bin liuyi$ jinfo -flag UseParallelGC 5202

-XX:-UseParallelGC

 

liuyideMacBook-Air:bin liuyi$ jinfo -flag MaxGCPauseMillis 5202

-XX:MaxGCPauseMillis=100

 

4、jmap:java内存映像工具

用于生成堆转储快照。

jmap -dump:format=b,file=路径 进程ID

 

liuyideMacBook-Air:bin liuyi$ jmap -dump:format=b,file=/Users/liuyi/aaa.bin 5202

Dumping heap to /Users/liuyi/aaa.bin ...

Heap dump file created

 

【JVM】第四章 虚拟机性能监控及故障处理工具

 

5、jhat:堆转储快照分析工具

liuyideMacBook-Air:~ liuyi$ jhat ./aaa.bin

Reading from ./aaa.bin...

Dump file created Mon Nov 05 20:23:58 CST 2018

Snapshot read, resolving...

Resolving 1300755 objects...

Chasing references, expect 260 dots....................................................................................................................................................................................................................................................................

Eliminating duplicate references....................................................................................................................................................................................................................................................................

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

【JVM】第四章 虚拟机性能监控及故障处理工具

6、jstack:java堆栈跟踪工具

用于生成虚拟机当前时刻的线程快照。

生成线程快照的目的:定位线程出现长时间停顿的原因。如线程死锁、死循环、线程长时间等待停顿等原因。

jstack -l 进程ID

【JVM】第四章 虚拟机性能监控及故障处理工具

三、可视化工具

【JVM】第四章 虚拟机性能监控及故障处理工具

1、jconsole:Java监控与管理控制台

进入jdk的bin目录open jconsole

【JVM】第四章 虚拟机性能监控及故障处理工具

 

这个不先不做具体的介绍,下面介绍一款更好用的。

 

2、 jvisualvm:多合一故障处理工具

进入jdk的bin目录 执行:open jvisualvm

【JVM】第四章 虚拟机性能监控及故障处理工具

我们说一下每一个区域对应的命令行工具:

1)显示虚拟机本地进程及进程配置 jps、jstat

jps -l

【JVM】第四章 虚拟机性能监控及故障处理工具

 

2)监控应用程序的CPU\GC\堆、方法区及线程。(jstat\jstack)

【JVM】第四章 虚拟机性能监控及故障处理工具

3)堆dump

jmap、jhat

 

4)线程jstack

【JVM】第四章 虚拟机性能监控及故障处理工具

 

5)抽样器

对CPU和内存的抽样

 

6)visual GC

这是一个插件,需要进行安装。

工具--》插件--》可用插件--》Visual GC

【JVM】第四章 虚拟机性能监控及故障处理工具

 

【JVM】第四章 虚拟机性能监控及故障处理工具

上面的堆和Metaspace内存区域的分配和收集算法,前面的章节也讲过。这里不到多说,可以观察一下内存的变化以前GC收集之后的情况。