JVM 性能调优监控工具之jstat(JVM统计监测工具)
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是jstat?
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,中文名字“java虚拟机统计信息工具”。
二、简介
Jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
Jstat可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间(来自百度百科)。
2.语法格式如下
代码如下(示例):
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
参数说明:
vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。
interval是采样时间间隔。
count是采样数目。
比如下面输出的是GC信息,采样时间间隔为200ms,采样数为5:
命令:jstat -gc 11237 200 5
root@LENOVO-LA0X1516:/# jstat -gc 11237 200 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
182.0 182.0 54.0 0.0 5411.0 1874.9 34000.0 3997.6 54343.0 25348.5 698 0.503 4 0.403 0.512
182.0 182.0 54.0 0.0 5411.0 1998.2 34000.0 3997.6 54343.0 25348.5 698 0.503 4 0.403 0.512
182.0 182.0 54.0 0.0 5411.0 1956.2 34000.0 3997.6 54343.0 25348.5 698 0.503 4 0.403 0.512
182.0 182.0 54.0 0.0 5411.0 2569.7 34000.0 3997.6 54343.0 25348.5 698 0.503 4 0.403 0.512
182.0 182.0 54.0 0.0 5411.0 2569.7 34000.0 3997.6 54343.0 25348.5 698 0.503 4 0.403 0.512
要明白上面各列的意义,先看JVM堆内存布局:
可以看出:
堆内存 = 年轻代 + 年老代 + 永久代
年轻代 = Eden区 + 两个Survivor区(From和To)
现在来解释各列含义:
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
总结
这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。