一、概述
JDK的命令行工具指的是jdk的bin目录中的一些可执行工具,除了常用的java、javac之外,还有很多其他可执行工具,主要包括用于监视虚拟机和故障处理的工具。这些故障处理工具被Sun公司作为“礼物”附赠给JDK的使用者。
主要的工具和功能如下:
名称 |
中文名 |
全拼 |
主要作用 |
jps |
虚拟机进程状况工具 |
JVM ProcessStatus Tool |
显示指定系统内所有虚拟机进程 |
jstat |
虚拟机统计信息监视工具 |
JVM Statistics Monitoring Tool |
用于收集虚拟机各方面的运行数据 |
jinfo |
Java配置信息工具 |
Configuration Info for Java |
实时地查看和调整虚拟机各项参数 |
jmap |
Java内存映像工具 |
Memory Map for Java |
用于生成堆转储快照 |
jhat |
虚拟机堆转储快照分析工具 |
JVM Heap Analysis Tool |
与jmap搭配使用,来分析jmap生成的堆转储快照 |
jstack |
Java堆栈跟踪工具 |
Stack Trace for Java |
于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件) |
二、 各命令详解
1. jps:虚拟机进程状况工具
1) 用途说明
- 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。
- 虽然功能比较单一,但它是使用频率最高的JDK命令行工具,因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程。
2) 命令格式
jps [ option ] [ hostid ]
3) 参数说明
- [ hostid ] : jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。
- [ option ]:参数的可选内容为下面几种
选项 |
作用 |
-q |
只输出LVMID,省略主类的名称 |
-m |
输出虚拟机进程启动时传递给主类的main函数的参数 |
-l |
输出主类的全名,如果进程执行的是jar包,输出jar的路径 |
-v |
输出虚拟机启动时jvm参数 |
4)使用示例
C:\Users\xk>jps
7712 Jps
4388 test
7716
C:\Users\xk>jps -q
4388
7716
5192
C:\Users\xk>jps -m
7616 Jps -m
4388 test
7716
C:\Users\xk>jps -l
4388 test.test
7716
8764 jdk.jcmd/sun.tools.jps.Jps
C:\Users\xk>jps -v
4388 test -Dfile.encoding=GBK
7716 -Dosgi.requiredJavaVersion=11 -Dosgi.instance.area.default=@user.home/ecli
pse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication --add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=11 -Dosgi.dataAreaRequiresExplicitInit=true --add-mod
ules=ALL-SYSTEM -Dosgi.requiredJavaVersion=11 -Dosgi.instance.area.default=@user
.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication --add-modules=A
LL-SYSTEM -Dosgi.requiredJavaVersion=11 -Dosgi.dataAreaRequiresExplicitInit=true
-Xms256m -Xmx2048m --add-modules=ALL-SYSTEM -Declipse.p2.max.threads=10 -Doomph
.update.url=http://download.eclipse.org/oomph/updates/milestone/latest -Doomph.r
edirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse
.oomph.git/plain/setups/ -Duser.dir=D:\java_tool\eclipse
8492 Jps -Dapplication.home=C:\Program Files\Java\jdk-15.0.1 -Xms8m -Djdk.module
.main=jdk.jcmd
C:\Users\xk>
2. jstat:虚拟机统计信息监视工具
1) 用途说明
- 用于监视虚拟机各种运行状态信息的命令行工具
- 它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
2) 命令格式
jstat [ option vmid [ interval[s|ms] [count] ] ]
3) 参数说明
对于命令格式中的VMID与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:[protocol:][//]vmid[@hostname[:port]/servername]
- interval和count k: 代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:jstat -gc 2764 250 20
- option : 代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况,具体选项及作用请参考下表
选项 |
作用 |
jdk版本 |
-class |
监视类装载、卸载数量、总空间一级类装载所耗费的时间 |
|
-gc |
监视java堆状况,包括Eden区、两个survivor区,老年代、永久代等容量,已用完空间、GC时间合计等信息 |
|
-gccapacity |
监视内容与-gc基本相同,但是输出主要关注java堆各大区域使用到的最大最小空间 |
|
-gcutil |
监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
|
-gccause |
与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
|
-gcnew |
监视新生代GC情况 |
|
-gcnewcapaciy |
监视内容与-gcnew基本相同,输出主要关注使用到的最大最小空间 |
|
-gcold |
监听老年代GC情况 |
|
-gcoldcapacity |
监视内容与-gcold基本相同,输出主要关注使用到的最大最小空间 |
|
-gcpermcapacity |
输出永久代使用到的最大最小空间 |
1.7及以下 |
-gcmetacapacity |
输出元空间使用到的最大最小空间 |
1.8及以上 |
-compiler |
输出JIT编译器编译过的方法、耗时等信息 |
|
-printcompilation |
输出已经被JIT编译的方法 |
|
4) 使用实例和结果信息说明
1> 监视类装载、卸载数量、总空间一级类装载所耗费的时间
C:\Users\xk>jstat -class 7716
Loaded Bytes Unloaded Bytes Time
20193 42956.4 1 1.0 33.60
C:\Users\xk>
结果列名 |
含义 |
Loaded |
装载的类的数量 |
Bytes |
装载类所占用的字节数 |
Unloaded |
卸载类的数量 |
Bytes |
卸载类的字节数 |
Time |
装载和卸载类所花费的时间 |
2> -gc 监视java堆状况,