jstat

Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计。
使用jstat我们可以对指定的JVM做如下监控:

  • 类的加载及卸载情况
  • 查看新生代、老生代及持久代的容量及使用情况
  • 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
  • 查看新生代中Eden区及Survior区中容量及分配情况等

    语法

    1. jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]
  • **generalOption**:单个常规命令行选项可以通过 jstat -options 输出支持的命令,比如常见的有

    • -class:类加载
    • -compiler:JIT 编译信息
    • -gc:垃圾回收信息
    • -printcompilation:显示Java HotSpot VM编译方法统计信息
  • **outputOptions**:一个或由单个的多输出选项
  • **vmid**:虚拟机标识符,一般用进程 id,还可以写完整的远程服务器上的进程 id
  • **interval**:采样间隔,默认单位是毫秒(可以为秒),制定后,则间隔多长时间输出一次
  • **count**:要显示的样本数量,也就是输出几次

    类装载信息

    1. $ jstat -class 17948
    2. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
    3. Loaded Bytes Unloaded Bytes Time
    4. 5678 10263.5 0 0.0 2.77

    类加载器统计信息:

  • Loaded:已加载的类数。

  • Bytes:加载的 kB 数。
  • Unloaded:卸载的类数。
  • Bytes:卸载的KB数。
  • Time:执行类加载和卸载操作所花费的时间。

    垃圾收集信息

    与垃圾收集信息有关的选项有:

  • -gc

  • -gcutil
  • -gccause
  • -gcnew
  • -gcold

    1. $ jstat -gc 17948
    2. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
    3. S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
    4. 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 编译方法统计信息。

    1. $ jstat -compiler 17948
    2. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
    3. Compiled Failed Invalid Time FailedType FailedMethod
    4. 2654 0 0 0.64 0
  • Compiled:执行的编译任务数。

  • Failed:编译任务数失败。
  • Invalid:无效的编译任务数。
  • Time:执行编译任务所花费的时间。
  • FailedType:上次失败的编译的编译类型。
  • FailedMethod:上次失败的编译的类名和方法。

    1. $ jstat -printcompilation 17948
    2. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
    3. Compiled Size Type Method
    4. 2680 34 1 java/util/concurrent/ConcurrentHashMap$ValueIterator next
  • Compiled:由最近编译的方法执行的编译任务数。

  • Size:最近编译的方法的字节码的字节数。
  • Type:最近编译的方法的编译类型。
  • Method:标识最近编译的方法的类名和方法名。类名使用斜杠(/)代替点(.)作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与 HotSpot -XX:+PrintCompilation 选项一致。