Java基础、中级、高级、架构面试资料

jstat 不同的统计维度(statOption)的输出说明

JAVA herman 2450浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

面试过很多程序员,他们都信誓旦旦的说他们会 JVM,懂 JVM。然后我就说给我讲讲 jstat 吧,它的用法和每个统计维度(statOption)大概输出哪些内容。然后全都哑火了,这只能说明一件事,他们并不是真的懂 JVM,只不过是在面试前准备了一下 JVM 相关的知识内容而已。

jstat 统计的维度(statOption)可以通过 -options 选项,查看不同操作系统所支持选项。具体有如下几种统计维度:

jstat 的统计维度

每个统计维度(statOption),都有不同的内容输出。

jstat –class<pid> 维度

jstat –class<pid>:显示加载 class 的数量,及所占空间等信息,类加载情况的统计。Loaded 装载的类的数量 Bytes 装载类所占用的字节数 Unloaded 卸载类的数量 Bytes 卸载类的字节数 Time 装载和卸载类所花费的时间。

先用 jps 命令,找出 Java 进程 id,再用 jstat 命令,具体用法如下:

~ jps
770 RemoteMavenServer
1415 Jps
685
~ jstat -class 770
Loaded  Bytes  Unloaded  Bytes     Time
  3629  6377.3       26    36.6       5.80
~

各列信息解释如下:

  • Loaded:加载了的类的数量
  • Bytes:加载了的类的大小,单为 Kb
  • Unloaded:卸载了的类的数量
  • Bytes:卸载了的类的大小,单为 Kb
  • Time:花在类的加载及卸载的时间

jstat -compiler <pid>

jstat -compiler <pid> 显示 VM 实时编译的数量等信息。HotSpot 中即时编译器编译情况的统计。

统计维度(statOption)compiler 具体用法如下:

~ jstat -compiler 770
Compiled Failed Invalid   Time   FailedType FailedMethod
    1928      0       0     3.86          0

各列参数解释如下:

  • Compiled:编译任务执行的次数
  • Failed:编译任务执行失败的次数
  • Invalid:编译任务非法执行的次数
  • Time:执行编译花费的时间
  • FailedType:最后一次编译失败的编译类型
  • FailedMethod:最后一次编译失败的类名及方法名

jstat -gc <pid>

jstat -gc <pid>:可以显示gc的信息,查看 gc 的次数,及时间。

用法如下:

 ~ jstat -gc 770
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
5120.0 5120.0  0.0    0.0   33280.0   1638.4   87552.0     4051.7   19072.0 18416.3 2432.0 2213.6      5    0.088   2      0.126    0.215

各列名称解释如下:

  • S0C:新生代中 Survivor space 中 S0 当前容量的大小(KB)
  • S1C:新生代中 Survivor space 中 S1 当前容量的大小(KB)
  • S0U:新生代中 Survivor space 中 S0 容量使用的大小(KB)
  • S1U:新生代中 Survivor space中S1容量使用的大小(KB)
  • EC:Eden space 当前容量的大小(KB)
  • EU:Eden space 容量使用的大小(KB)
  • OC:Old space 当前容量的大小(KB)
  • OU:Old space 使用容量的大小(KB)
  • PC:Permanent space 当前容量的大小(KB)
  • PU:Permanent space 使用容量的大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • YGCT:从应用程序启动到采样时 Young GC 所用的时间(秒)
  • FGC:从应用程序启动到采样时发生 Full GC 的次数
  • FGCT:从应用程序启动到采样时 Full GC 所用的时间(秒)
  • GCT:T 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于 YGC+FGC

jstat -gccapacity <pid>

jstat -gccapacity <pid>:可以显示,VM 内存中三代(young,old,perm)对象的使用和占用大小。新生代、老生代及持久代的存储容量情况。

用法如下:

~ jstat -gccapacity 770
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 43520.0 262144.0  43520.0 5120.0 5120.0  33280.0    87552.0   524288.0    87552.0    87552.0      0.0 1067008.0  19072.0      0.0 1048576.0   2432.0      5     2

各列代表的意思解释如下:

  • NGCMN:新生代的最小容量大小(KB)
  • NGCMX:新生代的最大容量大小(KB)
  • NGC:当前新生代的容量大小(KB)
  • S0C:当前新生代中survivor space 0的容量大小(KB)
  • S1C:当前新生代中survivor space 1的容量大小(KB)
  • EC:Eden space当前容量的大小(KB)
  • OGCMN:老生代的最小容量大小(KB)
  • OGCMX:老生代的最大容量大小(KB)
  • OGC:当前老生代的容量大小(KB)
  • OC:当前老生代的空间容量大小(KB)
  • PGCMN:持久代的最小容量大小(KB)
  • PGCMX:持久代的最大容量大小(KB)
  • PGC:当前持久代的容量大小(KB)
  • PC:当前持久代的空间容量大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • FGC:从应用程序启动到采样时发生 Full GC 的次数

jstat -gcutil <pid>

jstat -gcutil <pid>:统计 gc 信息,新生代、老生代及持代垃圾收集的情况。

用法如下:

~ jstat -gcutil 770
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00   8.32   4.63  96.56  91.02      5    0.088     2    0.126    0.215

各列信息解释如下:

  • S0:Heap上的 Survivor space 0 区已使用空间的百分比
  • S1:Heap上的 Survivor space 1 区已使用空间的百分比
  • E:Heap上的 Eden space 区已使用空间的百分比
  • O:Heap上的 Old space 区已使用空间的百分比
  • P:Perm space 区已使用空间的百分比
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • YGCT:从应用程序启动到采样时 Young GC 所用的时间(单位秒)
  • FGC:从应用程序启动到采样时发生 Full GC 的次数
  • FGCT:从应用程序启动到采样时 Full GC 所用的时间(单位秒)
  • GCT:从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于 YGC+FGC

jstat -gcnew <pid>

jstat -gcnew <pid>:年轻代对象的信息,新生代垃圾收集的情况。

用法如下:

~ jstat -gcnew 770
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
5120.0 5120.0    0.0    0.0  7  15 5120.0  33280.0   3285.5      5    0.088

各列信息解释如下:

  • S0C:当前新生代中 survivor space 0 的容量大小(KB)
  • S1C:当前新生代中 survivor space 1 的容量大小(KB)
  • S0U:S0 已经使用的大小(KB)
  • S1U:S1 已经使用的大小(KB)
  • TT:Tenuring threshold,要了解这个参数,我们需要了解一点Java内存对象的结构,在Sun JVM中,(除了数组之外的)对象都有两个机器字(words)的头部。第一个字中包含这个对象的标示哈希码以及其他一些类似锁状态和等标识信息,第二个字中包含一个指向对象的类的引用,其中第二个字节就会被垃圾收集算法使用到。
    在新生代中做垃圾收集的时候,每次复制一个对象后,将增加这个对象的收集计数,当一个对象在新生代中被复制了一定次数后,该算法即判定该对象是长周期的对象,把他移动到老生代,这个阈值叫着tenuring threshold。这个阈值用于表示某个/些在执行批定次数youngGC后还活着的对象,即使此时新生的的Survior没有满,也同样被认为是长周期对象,将会被移到老生代中。
  • MTT:Maximum tenuring threshold,用于表示TT的最大值。
  • DSS:Desired survivor size (KB)
  • EC:Eden space 当前容量的大小(KB)
  • EU:Eden space 已经使用的大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • YGCT:从应用程序启动到采样时 Young GC 所用的时间(单位秒)

jstat -gcnewcapacity <pid>

jstat -gcnewcapacity <pid>:年轻代对象的信息及其占用量,新生代的存储容量情况。

用法如下:

~ jstat -gcnewcapacity 770
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
   43520.0   262144.0    43520.0  87040.0   5120.0  87040.0   5120.0   261120.0    33280.0     5     2

各列信息解释如下:

  • NGCMN:新生代的最小容量大小(KB)
  • NGCMX:新生代的最大容量大小(KB)
  • NGC:当前新生代的容量大小(KB)
  • S0CMX:新生代中 SO 的最大容量大小(KB)
  • S0C:当前新生代中 SO 的容量大小(KB)
  • S1CMX:新生代中 S1 的最大容量大小(KB)
  • S1C:当前新生代中 S1 的容量大小(KB)
  • ECMX:新生代中 Eden 的最大容量大小(KB)
  • EC:当前新生代中 Eden 的容量大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • FGC:从应用程序启动到采样时发生 Full GC 的次数

jstat -gcold <pid>

jstat -gcold <pid>:old 代对象的信息,老生代及持久代发生 GC 的情况。

用法如下:

 ~ jstat -gcold 770
   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
 19072.0  18416.3   2432.0   2213.6     87552.0      4051.7      5     2    0.126    0.215

各列信息解释如下:

  • PC:当前持久代容量的大小(KB)
  • PU:持久代使用容量的大小(KB)
  • OC:当前老年代容量的大小(KB)
  • OU:老年代使用容量的大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • FGC:从应用程序启动到采样时发生 Full GC 的次数
  • FGCT:从应用程序启动到采样时 Full GC 所用的时间(单位秒)
  • GCT:从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

jstat -gcoldcapacity <pid>

jstat -gcoldcapacity <pid>:old 代对象的信息及其占用量,老生代的存储容量情况。

用法如下:

~ jstat -gcoldcapacity 770
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
    87552.0    524288.0     87552.0     87552.0     5     2    0.126    0.215

各列信息解释如下:

  • OGCMN:老生代的最小容量大小(KB)
  • OGCMX:老生代的最大容量大小(KB)
  • OGC:当前老生代的容量大小(KB)
  • OC:当前新生代的空间容量大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • FGC:从应用程序启动到采样时发生 Full GC 的次数
  • FGCT:从应用程序启动到采样时 Full GC 所用的时间(单位秒)
  • GCT:从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

jstat -gcpermcapacity <pid>

jstat -gcpermcapacity<pid>:perm 对象的信息及其占用量。

注意 Java 8 中已经没有这个命令了。改为 jstat -gcmetacapacity 了。jstat -gcmetacapacity 的用法如下:

~ jstat -gcmetacapacity 770
   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT
       0.0  1067008.0    19072.0        0.0  1048576.0     2432.0     5     2    0.126    0.215

jstat -gcpermcapacity 各列代表意思解释如下:

  • PGCMN:持久代的最小容量大小(KB)
  • PGCMX:持久代的最大容量大小(KB)
  • PGC:当前持久代的容量大小(KB)
  • PC:当前持久代的空间容量大小(KB)
  • YGC:从应用程序启动到采样时发生 Young GC 的次数
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时 Full GC 所用的时间(单位秒)
  • GCT:从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

jstat -gcmetacapacity 元空间大小统计。各列代表意思解释如下:

  • MCMN:最小元空间容量(kB)。
  • MCMX:最大元空间容量(kB)。
  • MC:元空间容量(kB)。
  • CCSMN:压缩类空间最小容量(kB)。
  • CCSMX:压缩类空间最大容量(kB)。
  • YGC:年轻一代GC事件的数量。
  • FGC:完整GC事件的数量。
  • FGCT:完全垃圾收集时间。
  • GCT:垃圾收集总时间。

jstat -printcompilation <pid>

jstat -printcompilation <pid>:当前 VM 执行的信息。

用法如下:

 ~ jstat -printcompilation 770
Compiled  Size  Type Method
    2051   1384    1 sun/rmi/server/UnicastRef invoke

各列代表意思解释如下:

  • Compiled:编译任务执行的次数
  • Size:方法的字节码所占的字节数
  • Type:编译类型
  • Method:指定确定被编译方法的类名及方法名,类名中使名“/”而不是“.”做为命名分隔符,方法名是被指定的类中的方法,这两个字段的格式是由HotSpot中的“-XX:+PrintComplation”选项确定的。

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » jstat 不同的统计维度(statOption)的输出说明