原来jdk自带了这么好玩的工具 > jstat使用教程

Posted java叶新东老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原来jdk自带了这么好玩的工具 > jstat使用教程相关的知识,希望对你有一定的参考价值。

什么是jstat

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。这个工具是纯命令行的,也就是说它没有图形界面;

注意:我们使用的是jstat,jdk自带的工具里面还有一个叫做jstatd的,它们俩的名字只差一个字母,jstatd是用来监控jvm的创建和结束,在这点上不要混淆

jstat 用法

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

看不懂?没关系,我们翻译一下

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

这下是不是就直观多了?还是不懂啥意思?没关系,我们介绍一下

-命令选项

就是我们要查询哪些命令,在控制台输入一下命令jstat -options,就会打印出所有的命令选项+
在这里插入图片描述
这些命令选项都是啥呀,干嘛用的呢?其实啊,每个命令都有不同的用处,先看大致功能,一会在细讲哈

  • class (类加载器数量和大小以及加载时间)
  • compiler (JIT)
  • gc (GC和堆状态)
  • gccapacity (各区大小)
  • gccause (最近一次GC统计和原因)
  • gcnew (新区统计)
  • gcnewcapacity (新区大小)
  • gcold (老区统计)
  • gcoldcapacity (老区大小)
  • gcpermcapacity (JDK7永久区大小)
  • gcmetacapacity (JDK8元数据大小)
  • gcutil (GC统计汇总)
  • printcompilation (HotSpot编译统计)

vmid

java进程id,也有人叫pid,一个main方法运行起来后就占用一个进程;可以用jps命令看你有那些java进程

间隔时间/毫秒

隔多久查一次,比如:如果我们要查询类加载统计信息,每隔1秒查一次,就可以这么写:

jstat -class 2707 1000 

然后他就会每隔一秒钟查一次你的类加载信息
在这里插入图片描述

查询次数

如果你需要没隔一秒查一次,一共查3三次,那么可以这么写

jstat -class 2707 1000 3

在命令运行后,查询三次它就会自动停止
在这里插入图片描述

命令选项介绍【options】

-class 打印出类加载的信息

此命令可查询类加载器数量和大小以及加载时间,在命令行输入以下字符:

jstat -class 2707 

在这里插入图片描述
以下是命令结果介绍

  • Loaded:已加载class的数量
  • Bytes:已加载class所占用空间大小
  • Unloaded:未加载数量
  • Bytes:未加载占用空间
  • Time:时间,单位 应该是秒(我猜的),不太可能是毫秒,2.2毫秒加载6700多个类太扯了;

-compiler 编译信息的数量和时间

jstat -compiler 2707

在这里插入图片描述
命令结果介绍

  • Compiled:编译成功的数量。
  • Failed:编译失败的数量
  • Invalid:不可用数量
  • Time:时间
  • FailedType:编译失败的类型
  • FailedMethod:编译失败的方法

-gc 打印堆内存使用情况 和 垃圾回收统计信息的命令

jstat -gc 2707 

在这里插入图片描述
命令结果介绍

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的已使用大小
  • S1U:第二个幸存区的已使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的已使用大小
  • OC:老年代大小
  • OU:老年代已使用大小
  • MC:方法区(在java8叫做元数据)大小
  • MU:方法区(在java8叫做元数据)已使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间已使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

-gccapacity 打印堆内存使用情况

jstat -gccapacity 2707

在这里插入图片描述
命令结果介绍

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区(from区)大小
  • S1C:第二个幸存区(to区)大小
  • EC:伊甸园区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

-gccause 打印出导致GC的原因

jstat -gccause 2707

在这里插入图片描述
命令结果介绍,这里我们只关注 LGCCGCC,其他的属性可以在上面的打印出的结果找到对用属性说明,这里只介绍主要的属性说明

  • LGCC:上一次GC的原因,是:分配失败;
  • GCC :当前GC的原因

-gcnew 新生代垃圾回收统计

jstat -gcnew 2707 

在这里插入图片描述
命令结果介绍

  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • TT:对象在新生代存活的次数
  • MTT:对象在新生代存活的最大次数
  • DSS:期望的幸存区大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间

-gcnewcapacity 新生代内存大小统计

 jstat -gcnewcapacity 2707

在这里插入图片描述
命令结果说明

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0CMX:最大幸存1区大小
  • S0C:当前幸存1区大小
  • S1CMX:最大幸存2区大小
  • S1C:当前幸存2区大小
  • ECMX:最大伊甸园区大小
  • EC:当前伊甸园区大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代回收次数

-gcold 老年代垃圾回收统计

jstat -gcold 2707

在这里插入图片描述

MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-gcoldcapacity 老年代内存大小统计

jstat -gcoldcapacity 2707 

在这里插入图片描述
命令结果介绍

OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-gcpermcapacity 永久代(方法区)空间统计 jdk7

方法区是JDK1.7以下才有的,在jdk1.8之后改为了元数据,但是这2者打印的信息都是一样的,因为博主这边只装了jdk1.8,所以方法区的统计就无法进行试验了,但是依然还有

-gcmetacapacity 元数据空间统计 jdk8

jstat -gcmetacapacity 2707 

在这里插入图片描述
命令结果介绍

MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-gcutil 总结垃圾回收统计

jstat -gcutil 2707

在这里插入图片描述
命令结果介绍

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-printcompilation HotSpot JVM编译方法统计

jstat -printcompilation 2707 

在这里插入图片描述
命令结果介绍

Compiled:最近编译方法的数量
Size:最近编译方法的字节码数量
Type:最近编译方法的编译类型。
Method:方法名标识

其实大家可以发现,打印出来的很多属性都是相同的,只会有个别不同的请情况,但还是要根据情况来打印具体的信息;

以上是关于原来jdk自带了这么好玩的工具 > jstat使用教程的主要内容,如果未能解决你的问题,请参考以下文章

原来jdk自带了这么好玩的工具 > jmap 使用教程

原来jdk自带了这么好玩的工具 > jinfo 使用教程

原来jdk自带了这么好玩的工具 > 使用 jstack定位死循环

原来jdk自带了这么好玩的工具 > 使用 jstack定位死循环

原来jdk自带了这么好玩的工具——使用 jstack定位死循环

JDK自带工具jps,jstat,jmap,jconsole使用