文章标题
- jps:虚拟机进程状况工具
- jstat:虚拟机统计信息监控工具
- -class
- -gc
- -gccapacity
- -gcutil
- -gccause
- -gcnew
- -gcnewcapacity
- -gcold
- -gcoldcapacity
- -compiler
- -printcompilation
- jinfo:Java配置信息工具
- jmap:java内存镜像工具
- jhat:虚拟机堆转储快照分析工具
- jstack:Java堆栈跟踪工具
- 工具总结
在JDK的bin目录下有很多的小工具,用得比较多的有javac.exe、java.exe。
了解一下其他的常用工具,本文以JDK1.8为例,系统是windows,windows和Linux有些东西有点小区别,这里不做解释。
jps:虚拟机进程状况工具
jps(JVM Process Status Tool),功能和ps命令类似,打印进程、主类名、参数等。
jps命令格式
jps [options] [hostid]
options
选项 | 作用 |
-q | 只输出进程号,忽略主类名称 |
-m | 输入虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类全名,如果启动的是jar,则输出jar路径 |
-v | 输出虚拟机进程启动时的JVM参数 |
jstat:虚拟机统计信息监控工具
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。显示类加载、内存、垃圾收集等信息。
jstat的命令格式为
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
options
选项 | 作用 |
-class | 监视类加载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监控Java堆状况、包括Eden区、2个Survivor区、老年代、永久代的容量,已用空间,垃圾收集时间等 |
-gccapacity | 监视内容与 |
-gcutil | 监控内容与 |
-gccause | 与 |
-gcnew | 监视新生代垃圾收集状况 |
-gcnewcapacity | 监视内容与 |
-gcold | 监视老年代垃圾收集状况 |
-gcoldcapacity | 监视内容与 |
-compiler | 输出即使编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被编译过的方法 |
-class
> jstat -class 3888
Loaded Bytes Unloaded Bytes Time
13926 25117.9 0 0.0 22.89
- Loaded:装载的类的数量
- Bytes:装载类所占用的字节数
- Unloaded:卸载类的数量
- Bytes:卸载类的字节数
- Time:装载和卸载类所花费的时间
-gc
> jstat -gc 3888
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
20992.0 19968.0 0.0 15452.2 307712.0 166215.2 124928.0 38642.0 73088.0 68280.0 9856.0 9003.5 17 1.009 3 0.467 1.476
- S0C:第一个Survivor空间的大小
- S1C:第二个Survivor空间的大小
- S0U:第一个Survivor空间的使用大小
- S1U:第二个Survivor空间的使用大小
- EC:Eden空间的大小
- EU:Eden空间的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
-gccapacity
> jstat -gccapacity 3888
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
43008.0 679936.0 401920.0 11264.0 20480.0 360960.0 86016.0 1359872.0 124928.0 124928.0 0.0 1112064.0 73344.0 0.0 1048576.0 9856.0 18 3
- NGCMN:年轻代 ( young ) 中初始化(最小)的大小
- NGCMX:年轻代 ( young ) 的最大容量
- NGC:年轻代 ( young ) 中当前的容量
- S0C:年轻代中第一个 survivor( 幸存区 )的容量
- S1C:年轻代中第二个 survivor( 幸存区)的容量
- EC:年轻代中 Eden 的容量
- OGCMN:old 区中初始化 ( 最小 ) 的大小
- OGCMX:old 区的最大容量
- OGC:old 区的当前新生成的容量
- OC:Old 区的容量
- MCMN:Metaspace 区初始化 ( 最小 ) 容量
- MCMX:Metaspace 区的最大容量
- MC:当前 metaspace 的容量
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代 GC 次数
- FGC:STW GC 次数
-gcutil
> jstat -gcutil 3888
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
80.48 0.00 55.18 35.61 93.23 91.46 18 1.079 3 0.467 1.546
- S0:第一个Survivor空间当前使用比例
- S1:第二个Survivor空间当前使用比例
- E:Eden空间当前使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收时间
- FGC:老年代垃圾回收消耗次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
-gccause
> jstat -gccause 3888
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
80.48 0.00 81.75 35.61 93.23 91.46 18 1.079 3 0.467 1.546 Allocation Failure No GC
- LGCC:上一次垃圾收集产生的原因
- …,参考
-gcutil
-gcnew
> jstat -gcnew 3888
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
19456.0 20480.0 0.0 9060.4 5 15 19456.0 360960.0 44310.5 19 1.149
- S0C:第一个Survivor的容量
- S1C:第二个Survivor的容量
- S0U:第一个Survivor的使用大小
- S1U:第二个Survivor的使用大小
- TT:Tenuring threshold,年级超过或等于TT的对象都会进入老年代,该值可以作为一个年轻代对象晋升老年代的速度指向标,该值长时间过小(比如为1),说明年轻代的对象很快就会进入老年代,
- MTT:Maximum tenuring threshold,可以通过
-XX:MaxTenuringThreshold=N
设置,默认为15 - DSS:Desired survivor size,单位为KB,这个值默认为Survivor区的50%,当Survivor区大小超过该值时就会将装不下的对象提前放入老年代
- EC:Eden空间容量
- EU:Eden空间使用大小
- YGC:Young GC次数
- YGCT:Young GC耗时
-gcnewcapacity
> jstat -gcnewcapacity 3888
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
43008.0 679936.0 452096.0 226304.0 19456.0 226304.0 20480.0 678912.0 360960.0 19 3
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:当前新生代容量
- S0CMX:第一个Survivor空间最大大小
- S0C:第一个Survivor空间使用大小
- S1CMX:第二个Survivor空间最大大小
- S1C:第二个Survivor空间使用大小
- ECMX:Eden空间最大大小
- EC:Eden空间使用大小
- YGC:年轻代垃圾收集次数
- FGC:老年代垃圾收集次数
-gcold
> jstat -gcold 3888
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
73344.0 68377.2 9856.0 9013.9 124928.0 44494.6 19 3 0.467 1.616
- MC:元空间大小
- MU:元空间使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- OC:老年代大小
- OU:老年代使用大小
- YGC:年轻代垃圾回收次数
- FGC:对堆内存整体包含新生代,老年代,永久代)垃圾回收次数
- FGCT:对堆内存整体包含新生代,老年代,永久代)垃圾回收耗时
- GCT:垃圾回收消耗总时间
-gcoldcapacity
> jstat -gcoldcapacity 3888
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
86016.0 1359872.0 124928.0 124928.0 19 3 0.467 1.616
- OGCMN:年代最小容量
- OGCMX:年代最大容量
- OGC:当前老年代大小
- OC:老年代大小
- YGC:年轻代垃圾回收次数
- FGC:Full GC次数
- FGCT:Full GC耗时
- GCT:垃圾回收消耗总时间
-compiler
> jstat -compiler 3888
Compiled Failed Invalid Time FailedType FailedMethod
8730 3 0 5.06 1 java/lang/management/ManagementFactory getPlatformMBeanServer
- Compiled:执行的编译任务数量。
- Failed:失败数量
- Invalid:不可用数量
- Time:时间
- FailedType:失败类型
- FailedMethod:失败方法
-printcompilation
> jstat -printcompilation 3888
Compiled Size Type Method
8740 16 1 java/util/concurrent/atomic/AtomicLong decrementAndGet
- Compiled:被执行的编译任务的数量
- Size:方法字节码的字节数
- Type:编译类型
- Method:编译方法的类名和方法名。
jinfo:Java配置信息工具
jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。
jinfo命令格式
jinfo [option] <pid>
jinfo [option] <executable <core>
jinfo [option] [server_id@]<remote server IP or hostname>
查看虚拟机参数
jinfo -flags 3888
查看某个参数
> jinfo -flag MaxNewSize 3888
-XX:MaxNewSize=696254464
修改某个参数
> jinfo -flag key=value 3888
备注:并不是所有的参数都支持动态修改
jmap:java内存镜像工具
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heap dump或dump文件)。
jmap的命令格式
jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>
optoins
选项 | 作用 |
-dump | 生成Java转储快照文件。格式为-dump:[live,]format=b,file=<filename>,其中 live子参数说明是否只dump存活的对象 |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象 |
-heap | 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等 |
-histo | 显示堆中的对象统计信息,包括类、实例数量、合计容量 |
-F | 当虚拟机进程堆对-dump选项没有响应时,可使用这个选项强制生成dump快照。 |
生成转储快照文件
jmap -dump:format=b,file=dump.bin 3888
jhat:虚拟机堆转储快照分析工具
jhat(JVM Heap Analysis Tools)命令需要与jmap搭配使用,来分析jmap生成的堆转储快照。
jhat dump.bin
jhat内置了一个微型HTTP/Web服务器,生成堆转储快照文件后,可直接在浏览器里查看
当控制台输出Server is ready
之后,就可以通过浏览器访问http://127.0.0.1:7000/
jstack:Java堆栈跟踪工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。
jstack的命令格式
jstack [-l] <pid>
jstack -F [-m] [-l] <pid>
jstack [-m] [-l] <executable> <core>
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
工具总结
名称 | 主要作用 |
appletviewer | 在不适用web浏览器的情况下运行和调试Applet,JDK11中被移除 |
extcheck | 检查jar冲突工具,从JDK9中被移除 |
jar | 创建和管理jar文件 |
java | Java运行工具,用来运行Class文件或Jar文件 |
javac | Java编程语言的编译器 |
javadoc | Java的API文档生成器 |
javah | C语言头文件和Stub函数生成器,用于编写JNI方法 |
javap | Java字节码分析工具 |
jdb | 基于JPDA协议的调试器,以类似于GDB的方式调试Java代码 |
jdeps | Java类依赖性分析工具 |
keytool | 管理秘钥库和证书。主要用于获取或缓存Kerberos协议的票据授权票据。允许用户查看本地凭据缓存和秘钥表中的条目(用于kerberos协议) |
policytool | 管理策略的gui工具,用于管理用户策略文件(.java.policy),在JDK10中被移除 |
native2ascii | 本地编码到ASCII编码的转换器(Native-to-ASCII Converter),用于"任意支持的字符编码"和对应的"ASCII编码和Unicode转义"之间的项目转换 |
rmic | Java RMI编译器,为使用JRMP或IIOP协议的远程对象生成Stub、Skeleton个Tie类,也用于生成OMG IDL |
rmiregistry | 远程对象注册表服务,用于在当前主机的指定端口上创建并启动一个远程对象注册表 |
rmid | 启动激活系统守护进程,允许在虚拟机中注册或激活对象 |
serialver | 生成并返回指定类的序列化版本ID |
tnameserv | 提供对命名服务的访问 |
idlj | IDL转Java编译器( IDL-to-Java Compiler),生成映射OMG IDL接口的Java源文件,并启用以Java编程语言编写的使用CORBA功能的应用程序的Java源文件。IDL 意即接口定义语言( Interface Definition Language ) |
orbd | 对象请求代理守护进程( Object Request Broker Daemon),提供从客户端查找和调用CORBA环境服务端上的持久化对象的功能。使用ORBD代替瞬态命名服务tnameserv。ORBD 包括瞬态命名服务和持久命名服务。ORBD工具集成了服务器管理器、互操作命名服务和引导名称服务器的功能。当客户端想进行服务器时定位、注册和激活功能时,可以与servertool一起使用 |
servertool | 为应用程序注册、注销、启动和关闭服务器提供易用的接口 |
javapackager | 打包、签名Java和JavaFX应用程序,在JDK 11中被移除 |
pack200 | 使用JavaGZIP压缩器将JAR文件转换为压缩的Pack200文件。压缩的压缩文件是高度压缩的JAR,可以直接部署,节省带宽并减少下载时间 |
unpack200 | 將Pack200生成的打包文件解压提取为JAR文件 |
javaws | 启动JavaWebStart并设置各种选项的工具。在JDK11中被移除 |
jps | JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各方面的运行数据 |
jstatd | JVM Statistics Monitoring Tool Daemon, jstat 的守护程序,启动一个RMI服务器应用程序,用于监视测试的HotSpot虚拟机的创建和终止,并提供一个界面,允许远程监控工具附加到在本地系统上运行的虚拟机。在JDK 9中集成到了JHSDB中 |
jinfo | Configuration Info for Java,显示虚拟机配置信息。在JDK 9中集成到了JHSDB中 |
jmap | Memory Map for Java,生成虚拟机的内存转储快照( heapdump文件)。在JDK 9中集成到了JHSDB中 |
jhat | JVM Heap Analysis Tool.用于分析堆转储快照,它会建立- -个HTTP/Web服务器,让用户可以在浏览器.上查看分析结果。在JDK 9中被JHSDB代替 |
jstack | Stack Trace for Java,显示虚拟机的线程快照。在JDK 9中集成到了JHSDB中 |
jhsdb | Java HotSpot Debugger.一个基于Serviceability Agent的HotSpot进程调试器,从JDK 9开始提供 |
jsadebugd | Java Serviceability Agent Debug Daemon,适用于Java的可维护性代理调试守护程序,主要用于附加到指定的Java进程、核心文件,或充当一个调试服务器 |
jcmd | JVM Command,虚拟机诊断命令工具,将诊断命令请求发送到正在运行的Java虚拟机。从JDK 7开始提供 |
jconsole | JavaConsole,用于监控Java虚拟机的使用JMX规范的图形工具。它可以监控本地和远程Java虚拟机,还可以监控和管理应用程序 |
jmc | Java Mission Control,包含用于监控和管理Java应用程序的工具,而不会引入与这些工具相关联的性能开销。开发者可以使用jmc命令来创建JMC工具,从JDK7Update40开始集成到OracleJDK中 |
jvisualvm | JavaVisualVM,一种图形化工具,可在Java虚拟机中运行时提供有关基于Java技术的应用程序(Java应用程序)的详细信息。Java VisualVM提供内存和CPU分析、堆转储分析、内存泄漏检测、MBean访问和垃圾收集。从JDK6Update7开始提供;从JDK9开始不再打包人JDK中,但仍保持更新发展,可以独立下载 |
schemagen | 用于XML绑定的Schema生成器,用于生成XML Schema文件 |
wsgen | XML Web Service 2.0的Java API,生成用于JAX-WS Web Service的JAX-WS便携式产物 |
wsimport | XML Web Service 2.0的Java API,主要用于根据服务端发布的WSDL文件生成客户端 |
xjc | 主要用于根据XML Schema文件生成对应的Java类 |
jshell | 基于Java的Shell REPL (Read-Eval-Print Loop)交互工具 |
jjs | 对Nashorn引擎的调用人口。Nashorn 是基于Java实现的一个轻 量级高性能JavaScript运行环境 |
jrunscript | Java命令行脚本外壳工具( Command Lime Script Shell),主要用于解释执行JavaScript. Groovy、Ruby等脚本语言 |