JVM03-性能监控和故障处理工具

Published on with 168 views

距离第二篇好像有了大半个月了,这段时间也实在是太忙了,虽然工作也不是996,但是也没有功夫闲下来学习。现在是凌晨1点,在杭州出差的某宾馆学习并笔记此文章。

性能监控和故障处理工具

JDK命令行工具

在jdk的bin目录下有着各种命令行工具,这些工具主要是被用来监视虚拟机和故障处理的工具。这些工具虽然体积都很小,但是功能都非常的强大。

JPS:虚拟机的进程状况工具

在Linux中PS命令是用于显示当前进程的状态。这里和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID。
jps命令格式
jps [options] [hostid]

jps执行样例

C:\Users\13756>jps -l
15208 org.jetbrains.idea.maven.server.RemoteMavenServer
8104 sun.tools.jps.Jps
13724

jps工具主要选项
选项 | 作用
—|—
-q | 只输出LVMID,省略主类名称
-m | 输出虚拟机进程启动时传递给主类mian()函数的参数
-l | 输出主类全名,如果进程执行的是jar包,输出jar路径
-v | 输出虚拟机进程启动时JVM参数

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

该命令是用于监视虚拟机各种运行状态信息的命令行工具,显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

jstat命令格式
jstat [option vmid [interval[s|ms] [count]] ]

vmid: 进程id
interval: 查询间隔
count: 次数

jstat执行样例

C:\Users\13756>jstat -gc 15208 200 2
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
5120.0 5120.0  0.0   5119.3 33280.0  29533.8   87552.0     2825.8   15232.0 14777.8 1920.0 1791.1      3    0.026   1      0.028    0.054
5120.0 5120.0  0.0   5119.3 33280.0  29533.8   87552.0     2825.8   15232.0 14777.8 1920.0 1791.1      3    0.026   1      0.028    0.054

jstat工具主要选项
选项 | 作用
—|—
-class | 监视类装载、卸载数量、总空间及类装载所耗费的时间
-gc | 监视java堆状况,包括Eden区、survivor区等等
-gccapacity | 监控内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
-gcutil | 与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew | 监视新生代GC的状况
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold | 监视老年代GC的状况
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity | 输出永久代使用到的最大和最小空间
-compiler | 输出JIT编译器编译过的方法、耗时等信息
-printcompilation | 输出已经被JIT编译的方法

jinfo:java配置信息工具

该命令作用是实时地查看和调整虚拟机的各项参数

jinfo命令格式
jinfo [option] pid

jinfo执行案例

C:\Users\13756>jinfo -flag CMSInitiatingOccupancyFraction 15208
-XX:CMSInitiatingOccupancyFraction=-1

jmap:java内存映像工具

该命令用于生成堆转储快照,jmap的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列,java堆和永久代的详细信息,如空间使用率、当前用的是那种收集器等

jmap命令格式
jmap [option] vmid

jmap主要选项
选项 | 作用
—|—
-dump | 生成Java堆转储快照
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap | 显示java堆详细信息,如空间使用率、当前用的是那种收集器等
-histo | 显示堆中对象统计信息,包括类、实例数量和合计容量
-permstat | 以ClassLoader为统计口径显示永久代内存状态
-F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照.

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

jhat与jmap搭配使用,来分析jmap生成的堆转储快照。这里不详细记录了

jstack:Java堆栈跟踪工具

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

jstack命令格式
jstack [option] vmid

jstack主要选项
选项 | 作用
—|—
-F | 当正常输出的请求不被响应时,强制输出线程堆栈
-l | 除堆栈外,显示关于锁的附加信息
-m | 如果调用本地方法的话,可以显示C/C++的堆栈

JDK的可视化工具

jconsole

除了上面的命令行工具外,jdk/bin目录下面还存放着一个可视化工具’jconsole.exe’

1.双击打开后将会列出所有的虚拟机进程,像jps命令一样。

jconsole01

2.选择进程id后即可看到菜单功能,完全可视化操作,so easy

jconsole02

Responses