jstsat(JVM Statistics Monitoring Tool)
jstat用于监视虚拟机各种运行状态信息的命令工具。可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat 命令格式:
jstat [ option vmid [interval [s|ms] [count]] ]
命令格式中的VMID与LVMID,如果是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程,那么VMID的格式应该是:
[protocol : ][//] lvmid [ @hostname [ :port ] / servername ]
interval 和 count 代表查询间隔和次数,如果缺省这两个参数,说明只查询一次。
option 列表:
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视java堆状况,包括Eden区、两个survivor区、老年代、永久代的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与 -gc 基本相同,但是输出主要关注Java堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与 -gc 基本相同,但是主要关注已使用空间占总空间的百分比 |
-gccause | 与状况 -gcutil 功能一样,但是会额外输出导致上次gc产生的原因 |
-gcnew | 监视新生代gc状况 |
-gcnewcapacity | 监视内容与 -gcnew 基本相同,但是输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代gc状况 |
-gcoldcapacity | 监视内容与 -gcold 基本相同,但是输出主要关注使用到的最大、最小空间 |
-gcpermcapacity | 输出永久代使用到的最大、最小空间 |
-compiler | 输出 JIT 编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被 JIT 编译的方法 |
-gcutil 例子
~ jstat -gcutil 2861 1000 2
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 81.88 86.39 0.12 98.33 95.71 5 0.023 0 0.000 0.023
0.00 81.88 86.39 0.12 98.33 95.71 5 0.023 0 0.000 0.023
2861是改程序在虚拟机的vim(用jps查询),1000表示每隔一秒查询一次,2表示一共查询2次。
新生代中两个Survivor区(S0、S1,表示Survivor0、Survivor1)里面使用的情况分别是0.00%和81.88%,Eden区(E,表示Eden)使用了86.39%。老年代old(O表示)使用了0.12%。元空间(M,表示Matespace,jdk1.8用这个代替了jdk1.7之前的PermGen Space永久代)使用98.33,但是这个Matespace大小跟虚拟机内存大小无关,直接跟物理机内存大小有关。CCSC表示的是Klass Metaspace的已经被commit的内存。程序启动以来发生Minor GC(YGC表示Young GC)5次,总耗时 0.023秒(YGCT表示程序以来发生Young GC所以次数总消耗的时间);发生Full GC(FGC表示Full GC)0次,总耗时0秒(FGCT表示所有Full GC执行的所耗时间),所有GC总共耗时0.023秒(GCT表示所有GC包括minor GC和Full GC)。