作用
jstat的主要作用就是对Java应用程序的资源和性能进行实时监控的命令行工具,主要包括GC情况和Heap Size资源使用情况。
jstat命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数解释:
- option 常见的都是使用-gcutil查看gc情况,其他可选项见下图。
- vmid : VM的进程号,即当前运行的java进程号。
- interval : 间隔时间,单位为秒或毫秒
- count:打印次数,如果缺省则打印无数次。
option选项代表着用户希望查询的虚拟机信息,主要分为3类:类加载、垃圾收集和运行期编译状况。具体选项见下图:

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程5828垃圾收集状况,一共查询5次,那命令行如下:
jstat -gc 5828 250 5
垃圾回收统计
查看gc的统计信息,关注点 主要是 已使用/总空间的占比情况。
jstat -gcutil 31798
运行截图(JDK1.8):

参数含义:
| 参数 | 描述 |
|---|---|
| S0 | 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 |
| s1 | 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 |
| E | 年轻代中Eden已使用的占当前容量百分比 |
| O | old代已使用的占当前容量百分比 |
| M | 元空间(MetaspaceSize)已使用的占当前容量百分比 |
| CCS | 压缩使用比例 |
| YGC | 年轻代垃圾回收次数 |
| FGC | 老年代垃圾回收次数 |
| FGCT | 老年代垃圾回收消耗时间 |
| GCT | 垃圾回收消耗总时间 |
堆内存使用情况统计
单位KB。
jstat -gccapacity 3400 20 20
运行截图(JDK1.8):

| 参数 | 描述 |
|---|---|
| NGCMN | 新生代最小容量 |
| NGCMX | 新生代最大容量 |
| NGC | 当前新生代容量 |
| S0C | 第一个幸存区大小 |
| S1C | 第二个幸存区的大小 |
| EC | 伊甸园区的大小 |
| OGCMN | 老年代最小容量 |
| OGCMX | 老年代最大容量 |
| OGC | 当前老年代大小 |
| OC | 当前老年代大小 |
| MCMN | 最小元数据容量 |
| MCMX | 最大元数据容量 |
| MC | 当前元数据空间大小 |
| CCSMN | 最小压缩类空间大小 |
| CCSMX | 最大压缩类空间大小 |
| CCSC | 当前压缩类空间大小 |
| YGC | 年轻代gc次数 |
| FGC | 老年代GC次数 |
类加载统计
jstat -class 3400 1000 100
| 参数 | 描述 |
|---|---|
| Loaded | 加载class的数量 |
| Bytes | 所占用空间大小 |
| Unloaded | 未加载数量 |
| Bytes | 未加载占用空间 |
| Time | 时间 |