JDK命令行工具

jps: 虚拟机进程状态工具

jps(JVM Process Status Tool) 可以列出正在运行的虚拟机进程及可以显示虚拟机执行的主类、名称已经这些进程的本地虚拟机唯一id(Local Virtual Mache Identifier,LVMID).

  • 命令格式:
jps [-q] [-mlvV] [<hostid>]
1
  • 执行样例
~ jps -l
50354 jdk.jcmd/sun.tools.jps.Jps
44271
1
2
3

jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程的状态,hostid为RMI注册表中注册的主机名。

  • jps的其他常用选项

jps工具主要选项

jstat: 虚拟机统计信息监控工具

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。

  • 命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
1

“对于命令格式中的VMID与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是”:

[protocol:][//]lvmid[@hostname[:port]/servername]
1

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:

jstat-gc 2764 250 20
1
  • option

jstat 工具主要选项

  • 执行示例
~ jstat -gcutil 50416
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
  0.00 100.00  20.22  24.85  97.25  92.32      9    0.097     0    0.000     6    0.011    0.109
1
2
3
  • 一些术语的中文解释 S0C:年轻代中第一个survivor(幸存区)的容量 (字节) S1C:年轻代中第二个survivor(幸存区)的容量 (字节) S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC:年轻代中Eden(伊甸园)的容量 (字节) EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) OC:Old代的容量 (字节) OU:Old代目前已使用空间 (字节) PC:Perm(持久代)的容量 (字节) PU:Perm(持久代)目前已使用空间 (字节) YGC:从应用程序启动到采样时年轻代中gc次数 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) FGC:从应用程序启动到采样时old代(全gc)gc次数 FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT:从应用程序启动到采样时gc用的总时间(s) NGCMN:年轻代(young)中初始化(最小)的大小 (字节) NGCMX:年轻代(young)的最大容量 (字节) NGC:年轻代(young)中当前的容量 (字节) OGCMN:old代中初始化(最小)的大小 (字节) OGCMX:old代的最大容量 (字节) OGC:old代当前新生成的容量 (字节) PGCMN:perm代中初始化(最小)的大小 (字节) PGCMX:perm代的最大容量 (字节) PGC:perm代当前新生成的容量 (字节) S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 O:old代已使用的占当前容量百分比 P:perm代已使用的占当前容量百分比 S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满) TT: 持有次数限制 MTT : 最大持有次数限制

jstat 官方文档

jinfo: Java配置信息工具

jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数。使用jps -v参数可以查看虚拟启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了,jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来。

  • 命令格式
jinfo <option> <pid>
1

option

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both VM flags and system properties
    -? | -h | --help | -help to print this help message
1
2
3
4
5
6
7
8
  • 执行示例
~ jinfo -flag CICompilerCount 50416
-XX:CICompilerCount=4
1
2

jmap: Java内存映射工具

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。

jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。

  • 命令格式
jmap <option> vmid
1

jmap工具主要选项

在jdk11下已经去掉了 -heap参数,jdk11下的选项如下:

~ jmap --help
Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:live] <pid>
        to connect to running process and print histogram of java object heap
        if the "live" suboption is specified, only count live objects
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message

    dump-options:
      live         dump only live objects; if not specified,
                   all objects in the heap are dumped.
      format=b     binary format
      file=<file>  dump heap to <file>

    Example: jmap -dump:live,format=b,file=heap.bin <pid>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • 执行示例
- jmap-dump:format=b,file=demo.bin 3500
Dumping heap to /tmp/demo.bin……
Heap dump file created
1
2
3