jstat
Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计。
使用jstat我们可以对指定的JVM做如下监控:
- 类的加载及卸载情况
- 查看新生代、老生代及持久代的容量及使用情况
- 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
-
语法
jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]
**generalOption**
:单个常规命令行选项可以通过jstat -options
输出支持的命令,比如常见的有- -class:类加载
- -compiler:JIT 编译信息
- -gc:垃圾回收信息
- -printcompilation:显示Java HotSpot VM编译方法统计信息
**outputOptions**
:一个或由单个的多输出选项**vmid**
:虚拟机标识符,一般用进程 id,还可以写完整的远程服务器上的进程 id**interval**
:采样间隔,默认单位是毫秒(可以为秒),制定后,则间隔多长时间输出一次-
类装载信息
$ jstat -class 17948
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Loaded Bytes Unloaded Bytes Time
5678 10263.5 0 0.0 2.77
类加载器统计信息:
Loaded:已加载的类数。
- Bytes:加载的 kB 数。
- Unloaded:卸载的类数。
- Bytes:卸载的KB数。
-
垃圾收集信息
与垃圾收集信息有关的选项有:
-gc
- -gcutil
- -gccause
- -gcnew
-gcold
$ jstat -gc 17948
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
8192.0 10752.0 7789.3 0.0 120320.0 37674.3 81920.0 5849.9 27520.0 25562.1 3712.0 3381.9 4 0.027 1 0.024 0.051
S0C、S1C、S0U、S1U:S0 和 S1 的总量与使用量
- EC、EU:Eden 区总量与使用量
- OC、OU:Old 区总量与使用量
- MC、MU:Metaspace 区总量与使用量
- CCSC、CCSU:压缩类空间总量与使用量
- YGC、YGCT:YoungGC 的次数与时间
- FGC、FGCT:FullGC 的次数与时间
- GCT:总的 GC 时间
以上的参数信息对于我们的 gc 调优来说相当重要,再配不停的输出每秒的 GC 信息,也能很清楚的看到 GC 的变化。
还有其他的选项,可以输出各种的信息,详细请查阅文档。
JIT 编译
有两个选项:
-compiler
:显示有关 Java HotSpot VM 即时编译器行为的统计信息。-printcompilation
:显示 Java HotSpot VM 编译方法统计信息。$ jstat -compiler 17948
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Compiled Failed Invalid Time FailedType FailedMethod
2654 0 0 0.64 0
Compiled
:执行的编译任务数。Failed
:编译任务数失败。Invalid
:无效的编译任务数。Time
:执行编译任务所花费的时间。FailedType
:上次失败的编译的编译类型。FailedMethod
:上次失败的编译的类名和方法。$ jstat -printcompilation 17948
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Compiled Size Type Method
2680 34 1 java/util/concurrent/ConcurrentHashMap$ValueIterator next
Compiled
:由最近编译的方法执行的编译任务数。Size
:最近编译的方法的字节码的字节数。Type
:最近编译的方法的编译类型。Method
:标识最近编译的方法的类名和方法名。类名使用斜杠(/)代替点(.)作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与 HotSpot -XX:+PrintCompilation 选项一致。