JVM性能监控与故障处理工具之jstat

2020-02-04  本文已影响0人  Leocat

一、概述

jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

二、jstat 相关参数

jstat-help

option 可以从下面参数中选择

1. -class

显示加载class的数量,及所占空间等信息

jstat-class
jstat -class <pid>

2. -compiler

显示VM实时编译(JIT)的数量等信息。

jstat-compile
jstat -compiler <pid>

3. -gc

显示gc相关的堆信息,查看gc的次数,及时间。

jstat-gc
jstat -gc <pid>

4. -gccapacity

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

jstat-gccapacity
jstat -gccapacity <pid>

5. -gcnew

年轻代对象的信息。

jstat-gcnew
jstat -gcnew <pid>

6. -gcnewcapacity

年轻代对象的信息及其占用量

jstat-gcnewcapacity
jstat -gcnewcapacity <pid>

NGCMN :年轻代(young)中初始化(最小)的大小(字节)
NGCMX :年轻代(young)的最大容量 (字节)
NGC :年轻代(young)中当前的容量 (字节)
S0CMX :年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

7. -gcold

老年代对象的信息

jstat-gcold
jstat -gcold <pid>

8. -gcoldcapacity

老年代对象的信息及其占用量

jstat-gcoldcapacity
jstat -gcoldcapacity <pid>

9. -gcpermcapacity

永久代对象的信息及其占用量

jstat-gcpermcapacity
jstat -gcpermcapacity <pid>

10. -gcutil

以百分比形式统计gc信息

jstat-gcutil
jstat -gcutil <pid>

11. -gccause

显示垃圾回收的相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因

jstat-gccause
jstat -gccause <pid>

P.S.:gccause也可以加时间参数,例如

jstat -gccause <pid> 2s 10

12. -printcompilation

当前VM执行的信息。

jstat-printcompilation
jstat -printcompilation <pid>

三、用法

1. -t

参数-t,它将在每行数据之前打印目标 Java 进程的启动时间。如下所示:


image.png

我们可以比较 Java 进程的启动时间以及总 GC 时间(GCT 列),或者两次测量的间隔时间以及总 GC 时间的增量,来得出 GC 时间占运行时间的比例。

如果该比例超过 20%,则说明目前堆的压力较大;如果该比例超过 90%,则说明堆里几乎没有可用空间,随时都可能抛出 OOM 异常。

2. OU列

jstat还可以用来判断是否出现内存泄漏。在长时间运行的 Java 程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中 OU 列(即已占用的老年代内存)的最小值。

然后,我们每隔一段较长的时间重复一次上述操作,来获得多组 OU 最小值。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。

四、参考资料

jvm 性能调优工具之 jstat

上一篇下一篇

猜你喜欢

热点阅读