Java 虚拟机进程状态工具jstat


利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

Java 虚拟机进程状态工具JSTAT

语法

jstat [option vmid [interval [s|ms][count]] [count]] ]

options

work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

jstat工具主要选项

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

示例:

以下输出空间单位都是KB,时间单位都是s

类加载统计

Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -class 47
Loaded  Bytes  Unloaded  Bytes     Time
 12225 23448.0        0     0.0      16.53

编译统计

Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -compiler 47
Compiled Failed Invalid   Time   FailedType FailedMethod
   14158      1       0    71.73          1 com/mysql/jdbc/AbandonedConnectionCleanupThread run

垃圾回收统计

S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gc 47
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
17024.0 17024.0  0.0    22.7  136320.0 60520.6   460416.0   88295.8   76212.0 74725.3 8392.0 8040.4    223    1.986   4      0.277    2.263

空间大小

堆内存统计

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gccapacity 47
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
170368.0 170368.0 170368.0 17024.0 17024.0 136320.0   460416.0   460416.0   460416.0   460416.0      0.0 1118208.0  76212.0      0.0 1048576.0   8392.0    223     4

新生代垃圾回收统计

S0C:第一个幸存区大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcnew 47
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
17024.0 17024.0    0.0   22.7  6   6 8512.0 136320.0  63300.2    223    1.986

新生代内存统计

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcnewcapacity 47
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
  170368.0   170368.0   170368.0  17024.0  17024.0  17024.0  17024.0   136320.0   136320.0   223     4

老年代垃圾回收统计

MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcold 47
   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
 76212.0  74725.3   8392.0   8040.4    460416.0     88295.8    223     4    0.277    2.263

老年代内存统计

OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcoldcapacity 47
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
   460416.0    460416.0    460416.0    460416.0   223     4    0.277    2.263

元数据空间统计

MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcmetacapacity 47
   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT
       0.0  1118208.0    76212.0        0.0  1048576.0     8392.0   223     4    0.277    2.263

总结垃圾回收统计

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:Eden区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
work@authority-schedule-v1-fbf4cfd6d-86zhw:~$ jstat -gcutil 47
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.13  55.01  19.18  98.05  95.81    223    1.986     4    0.277    2.263

垃圾回收

分析jstat输出的工具

jstat的挑战之一是您需要手动分析生成的统计信息。 正如您看到的那样,仅了解/解释一行内容将花费很长时间,这将很繁琐。 您可以使用GCeasy工具 ,该工具可以解析jstat输出并生成具有洞察力的图形和指标。

jstat局限性

它没有提供有关GC活动的丰富详细信息。 它仅提供足够的信息。 例如,从jstat您将不知道:

  • 如果一次样本中报告了多个GC事件,那么我们将不知道每个GC事件的暂停时间是多少。
  • 用户(即Java层),系统(即内核)和用户花费了多少时间。
  • 有多少个GC线程正在工作,并占用了多少时间?
  • 一个GC事件具有几个子阶段(例如初始标记,清理,备注,并发标记……)。 无法提供信息分类。
  • 每个GC事件回收多少字节。

有时,jstat报告的数据也会产生误导

如果您想进行准确的GC分析,GC日志是更可靠的方法。

引用

【JVM】jstat命令详解—JVM的统计监测工具


文章作者: WangQingLei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WangQingLei !
 上一篇
线程池 线程池
线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。 在项目工程中,基于池化思想的技术应用很多,例如基于线程池的任务并发执行,中间件服务的连接池配置,通过对共享资源
2022-03-29
下一篇 
mysql-isolation-level mysql-isolation-level
Mysql数据库隔离级别 未完待续
2022-03-26
  目录