JVM工具文档

JVM进程监控

jps

命令作用

  • 查看本地(或远程)JVM里面所有进程的ID,进程启动路径

命令选项

  • 查询帮助

    • jps -help
    • jps [-q] [-mlvV] []
  • 常用选项

    • -q 只输出本地虚拟机ID,省略主类的名称
    • -m 输出虚拟机进程启动时传递给主类main()函数的参数
    • -l 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
    • -v 输出虚拟机进程启动时JVM参数
    • -V 输出虚拟机进程启动时JVM参数(通过flags file文件设置的参数)

示例说明

  • 打印帮助

jps -help

  1. $ jps -help
  2. usage: jps [-help]
  3. jps [-q] [-mlvV] [<hostid>]
  4. Definitions:
  5. <hostid>: <hostname>[:<port>]
  • 查询进程Id和主类的名称

jps -l

$ jps -l
4133 sun.tools.jps.Jps
3733 org.apache.hadoop.hdfs.server.datanode.DataNode
3626 org.apache.hadoop.hdfs.server.namenode.NameNode
3919 org.apache.hadoop.yarn.server.nodemanager.NodeManager
  • 查询进程Id和JVM启动参数

jps -lv

$ jps -lv
3733 org.apache.hadoop.hdfs.server.datanode.DataNode -Dproc_datanode -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=ERROR,RFAS -Dyarn.log.dir=/opt/module/hadoop-3.3.1/logs -Dyarn.log.file=hadoop-java-datanode-node101.log -Dyarn.home.dir=/opt/module/hadoop-3.3.1 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/module/hadoop-3.3.1/lib/native -Dhadoop.log.dir=/opt/module/hadoop-3.3.1/logs -Dhadoop.log.file=hadoop-java-datanode-node101.log -Dhadoop.home.dir=/opt/module/hadoop-3.3.1 -Dhadoop.id.str=java -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml
3626 org.apache.hadoop.hdfs.server.namenode.NameNode -Dproc_namenode -Djava.net.preferIPv4Stack=true -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dyarn.log.dir=/opt/module/hadoop-3.3.1/logs -Dyarn.log.file=hadoop-java-namenode-node101.log -Dyarn.home.dir=/opt/module/hadoop-3.3.1 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/module/hadoop-3.3.1/lib/native -Dhadoop.log.dir=/opt/module/hadoop-3.3.1/logs -Dhadoop.log.file=hadoop-java-namenode-node101.log -Dhadoop.home.dir=/opt/module/hadoop-3.3.1 -Dhadoop.id.str=java -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml
4157 sun.tools.jps.Jps -Dapplication.home=/opt/module/jdk1.8.0_291 -Xms8m
3919 org.apache.hadoop.yarn.server.nodemanager.NodeManager -Dproc_nodemanager -Djava.net.preferIPv4Stack=true -Dyarn.log.dir=/opt/module/hadoop-3.3.1/logs -Dyarn.log.file=hadoop-java-nodemanager-node101.log -Dyarn.home.dir=/opt/module/hadoop-3.3.1 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/module/hadoop-3.3.1/lib/native -Dhadoop.log.dir=/opt/module/hadoop-3.3.1/logs -Dhadoop.log.file=hadoop-java-nodemanager-node101.log -Dhadoop.home.dir=/opt/module/hadoop-3.3.1 -Dhadoop.id.str=java -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender

JVM状态监控

jstat

官方文档

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

命令作用

JVM 统计信息监控工具 - 附加到检测的 HotSpot Java 虚拟机,并收集和记录命令行选项指定的性能统计信息。

命令选项

jstat 命令支持两种类型的选项,常规选项和输出选项。 常规选项使 jstat 命令显示简单的用法和版本信息。 输出选项决定了统计输出的内容和格式。

常规选项

显示帮助消息

$ jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as 
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.

显示静态选项列表。请参阅输出选项

$ jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

输出选项

如果不指定常规选项,则可以指定输出选项。输出选项确定 jstat 命令输出的内容和格式,由单个 statOption 加上任何其他输出选项(-h、-t 和 -J)组成。 statOption 必须放在第一位。确定 jstat 命令显示的统计信息。下面列出了可用的选项。使用 -options 常规选项显示特定平台安装的选项列表。请参阅统计选项和输出。

-statOption

  • class:显示有关类加载器行为的统计信息。
  • gc:显示有关垃圾收集堆行为的统计信息。
  • gccapacity:显示有关世代及其相应空间的容量的统计信息。
  • gccause:显示有关垃圾收集统计信息的摘要(与 -gcutil 相同),以及上次和当前(适用时)垃圾收集事件的原因。
  • gcnew:显示新生代行为的统计信息。
  • gcnewcapacity:显示有关新生代大小及其对应空间的统计信息。
  • gcold:显示有关老年代行为的统计信息和元空间统计信息。
  • gcoldcapacity:显示老年代大小的统计信息。
  • gcmetacapacity:显示有关元空间大小的统计信息。
  • gcutil:显示有关垃圾收集统计信息的摘要。
  • compiler器:显示有关 Java HotSpot VM Just-in-Time 编译器行为的统计信息。
  • printcompilation:显示 Java HotSpot VM 编译方法统计信息。

输出格式

  • -t 显示时间戳
  • -h 多少行重复一次表头
  • interval统计间隔
    • ms 毫秒
    • s 秒
  • count统计次数

示例说明

  • 显示GC heap中的信息
    • jstat -gc -t jpsid 1s ```basic $ jstat -gc -t 3919 1s Timestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
       346.3 960.0  960.0   36.6   0.0    8000.0   3019.9   19552.0    12212.9   37720.0 37012.7 4736.0 4571.8     50    0.192   2      0.077    0.269
       347.3 960.0  960.0   36.6   0.0    8000.0   3019.9   19552.0    12212.9   37720.0 37012.7 4736.0 4571.8     50    0.192   2      0.077    0.269
       348.3 960.0  960.0   36.6   0.0    8000.0   3019.9   19552.0    12212.9   37720.0 37012.7 4736.0 4571.8     50    0.192   2      0.077    0.269
       349.3 960.0  960.0   36.6   0.0    8000.0   3219.8   19552.0    12212.9   37720.0 37012.7 4736.0 4571.8     50    0.192   2      0.077    0.269
       350.3 960.0  960.0   36.6   0.0    8000.0   3219.8   19552.0    12212.9   37720.0 37012.7 4736.0 4571.8     50    0.192   2      0.077    0.269
      

======================================================================================================================================================== 垃圾收集的堆统计信息。

S0C: 当前幸存者0 空间容量 (kB) S1C: 当前幸存者1 空间容量 (kB)

S0U: 幸存者0 空间利用率 (kB) S1U:幸存者1 空间利用率 (kB)

EC: 当前伊甸园空间容量 (kB) EU:伊甸园空间利用率(kB)

OC: 当前年老代容量 (kB) OU:年老代空间利用率(kB)

MC: 元空间容量 (kB) MU: 元空间利用率 (kB)

CCSC: 压缩类空间容量 (kB) CCSU: 使用的压缩类空间 (kB)

YGC:年轻代垃圾收集事件的数量 YGCT:年轻代垃圾回收时间。

FGC:Full GC的事件的数量 FGCT:Full GC的收集时间 GCT:总垃圾收集时间


- 显示GC heap中的信息(需要显示峰值)
   - jstat -gccapacity -t vmid 500ms
```basic
jstat -gccapacity -t 3919 500ms 5
Timestamp        NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
          442.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
          442.8   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
          443.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
          443.8   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
          444.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
  • 显示GC heap中的信息(需要显示峰值)
    • jstat -gccapacity -t vmid 500ms ```basic jstat -gccapacity -t 3919 500ms 5 Timestamp NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
       442.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
       442.8   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
       443.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
       443.8   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
       444.3   9536.0 152896.0   9920.0  960.0  960.0   8000.0    19136.0   305856.0    19552.0    19552.0      0.0 1083392.0  37720.0      0.0 1048576.0   4736.0     51     2
      

================================================== 内存池生成和空间容量。

NGCMN: 最小新生代容量 (kB) NGCMX: 最大新生代容量 (kB) NGC:当前的新生代容量 (kB)

S0C: 当前幸存者空间容量 (kB) S1C: 当前幸存者空间容量 (kB)

EC: 当前伊甸园空间容量 (kB)

OGCMN: 最小年老代容量 (kB) OGCMX: 最大年老代容量 (kB)

OGC:当前的年老代容量 (kB)

OC: 当前年老代容量 (kB)

MCMN: 最小元数据空间容量 (kB) MCMX: 最大元数据空间容量 (kB) MC: 元数据空间容量 (kB)

CCSMN:压缩类空间最小容量(kB) CCSMX:压缩类空间最大容量(kB) CCSC: 压缩类空间容量 (kB)

YGC:新生代GC事件的数量 FGC:Full GC 事件的数量


- 显示引起GC的原因
   - jstat -gccause pid
```bash
$ jstat -gccause 9587
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
  0.00   3.97  31.11  63.79  97.66  96.62     51    0.227     2    0.069    0.296 Allocation Failure   No GC
  • 显示有关垃圾收集统计信息的摘要
    • jstat -gcutil pid
      $ jstat -gcutil 9587
      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
      1.54   0.00  26.94  63.79  97.80  96.62     52    0.228     2    0.069    0.297
      

      JVM监控工具

jstatd

命令作用

启动一个 RMI 服务器应用程序,该应用程序监视已检测的 HotSpot Java 虚拟机的创建和终止,并提供一个接口以允许远程监视工具连接到在本地系统上运行的 Java 虚拟机。

工具配置

  • 创建安全策略文件
    • grant codebase “file:$JAVA_HOME/lib/tools.jar” { permission java.security.AllPermission; };
  • 启动jstatd并指定安全策略文件
    • jstatd -J-Djava.security.policy=my.policy

命令选项

$ jstatd -help
usage: jstatd [-nr] [-p port] [-n rminame]

使用示例