• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

jstat --- JVM的统计监测工具 java gc 内存使用 故障排查

Jstat名称:Java Virtual Machine statistics monitoring tool


jstat 官方文档https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

参考文档:jvm 性能调优工具之 jstat 命令详解


1. jstat命令简介

jstat 命令可以查看 堆内存非堆内存 各部分的使用量,以及 加载类 的数量。

命令的格式如下:

jstat [-命令选项] [-t] [-h lines] [vmid] [间隔时间/毫秒] [查询次数]
  • -option: 多滴很,见下面使用列表,或者看官网(-statOption

  • -t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间

  • -h: 可以在指定输出多少行以后输出一次表头

  • vmid: Virtual Machine ID( 进程的 pid

  • interval 打印间隔 ,单位为毫秒; 默认1次

  • count: 用于指定输出多少次记录,缺省则会一直打印

2. 使用详情列表


【以下统计中未标明的:空间单位: 都是KB时间单位: 都是 s 秒】


特别说明以下含义:

YGCT:从应用程序启动到采样时年轻代中 gc 所用时间(s)

FGCT:从应用程序启动到采样时 old 代 gc 所用总时间(s)

GCT:从应用程序启动到采样时 gc 用的总时间(s)

1>类加载统计

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#class_option


命令:

jstat -class 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • Loaded:加载class的数量

  • Bytes:所占用空间大小

  • Unloaded:未加载数量

  • Bytes:未加载占用空间

  • Time:时间

2>编译统计

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#compiler_option


命令:

jstat -compiler 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • Compiled:编译数量。

  • Failed:失败数量

  • Invalid:不可用数量

  • Time:时间

  • FailedType:失败类型

  • FailedMethod:失败的方法

3>垃圾回收统计查看(常用来查看gc情况)

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gc_option


命令:

jstat -gc 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析(着重关注红色部分):

  • S0C:第一个幸存区的大小

  • S1C:第二个幸存区的大小

  • S0U:第一个幸存区的使用大小

  • S1U:第二个幸存区的使用大小

  • EC:伊甸园区的大小

  • EU:伊甸园区的使用大小

  • OC:老年代大小

  • OU:老年代使用大小

  • MC:方法区大小

  • MU:方法区使用大小

  • CCSC:压缩类空间大小

  • CCSU:压缩类空间使用大小

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

4>堆内存(分配的不是使用的)

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gccapacity_option

 

命令:

jstat -gccapacity 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • NGCMN:新生代最小容量

  • NGCMX:新生代最大容量

  • NGC:当前新生代容量

  • S0C:第一个幸存区大小

  • S1C:第二个幸存区的大小

  • EC:伊甸园区的大小

  • OGCMN:老年代最小容量

  • OGCMX:老年代最大容量

  • OGC:当前老年代大小

  • OC:当前老年代大小

  • MCMN:最小元数据容量

  • MCMX:最大元数据容量

  • MC:当前元数据空间大小

  • CCSMN:最小压缩类空间大小

  • CCSMX:最大压缩类空间大小

  • CCSC:当前压缩类空间大小

  • YGC:年轻代gc次数

  • FGC:老年代GC次数


java 应用的内存组成查看文章


5>新生代垃圾回收统计(yong使用)

官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gcnew_option


 命令:

jstat -gcnew 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • S0C:第一个幸存区大小

  • S1C:第二个幸存区的大小

  • S0U:第一个幸存区的使用大小

  • S1U:第二个幸存区的使用大小

  • TT:对象在新生代存活的次数

  • MTT:对象在新生代存活的最大次数

  • DSS:期望的幸存区大小

  • EC:伊甸园区的大小

  • EU:伊甸园区的使用大小

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

6>新生代内存统计

 命令:

jstat -gcnewcapacity 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • NGCMN:新生代最小容量

  • NGCMX:新生代最大容量

  • NGC:当前新生代容量

  • S0CMX:最大幸存1区大小

  • S0C:当前幸存1区大小

  • S1CMX:最大幸存2区大小

  • S1C:当前幸存2区大小

  • ECMX:最大伊甸园区大小

  • EC:当前伊甸园区大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代回收次数

7>老年代垃圾回收统计(old使用情况)

 命令:

jstat -gcold 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • MC:方法区大小

  • MU:方法区使用大小

  • CCSC:压缩类空间大小

  • CCSU:压缩类空间使用大小

  • OC:老年代大小

  • OU:老年代使用大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

8>老年代内存统计

命令:

jstat -gcoldcapacity 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • OGCMN:老年代最小容量

  • OGCMX:老年代最大容量

  • OGC:当前老年代大小

  • OC:老年代大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

9>JDK7 下 永久代空间统计(非堆内存)

 命令:

jstat -gcpermcapacity 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • PGCMN:最小永久代容量

  • PGCMX:最大永久代容量

  • PGC:当前新生成的永久代空间大小

  • PC :永久代空间大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

10>JDK8 下 元数据空间统计(meta使用)

 命令:

jstat -gcmetacapacity 7172 1000
  • 7172:为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • MCMN: 最小元数据容量

  • MCMX:最大元数据容量

  • MC:当前元数据空间大小

  • CCSMN:最小压缩类空间大小

  • CCSMX:最大压缩类空间大小

  • CCSC:当前压缩类空间大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

11>总结垃圾回收统计

命令:

jstat -gcutil 19570 1000
  • 19570 :为java 进程id

  • 1000:每隔 1s 打印一次

结果:

image.png

解析:

  • S0:幸存1区当前使用比例

  • S1:幸存2区当前使用比例

  • E:伊甸园区使用比例

  • O:老年代使用比例

  • M:元数据区使用比例

  • CCS:压缩使用比例

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

12>JVM编译方法统计

命令:

jstat -printcompilation 19570

结果:

image.png

解析:

  • Compiled:最近编译方法的数量

  • Size:最近编译方法的字节码数量

  • Type:最近编译方法的编译类型。

  • Method:方法名标识。




0
0
下一篇:JVM 进程内存 大小计算

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。