文章标题

  • 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。

Kvm修复虚拟机磁盘 虚拟机修复工具_故障处理


了解一下其他的常用工具,本文以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

监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到最大、最小空间

-gcutil

监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比

-gccause

-gcutil功能一样,但是会输出导致上一次垃圾收集产生的原因

-gcnew

监视新生代垃圾收集状况

-gcnewcapacity

监视内容与-gcnew基本相同,输出主要关注使用最小、最小空间

-gcold

监视老年代垃圾收集状况

-gcoldcapacity

监视内容与-gcold基本相同,输出主要关注使用最小、最小空间

-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

Kvm修复虚拟机磁盘 虚拟机修复工具_toos_02


查看某个参数

> 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/

Kvm修复虚拟机磁盘 虚拟机修复工具_Kvm修复虚拟机磁盘_03

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等脚本语言