Java命令行工具
JDK是java语言软件开发工具包,通过它来编译Java程序。JDK在其bin/目录下提供了各种监控工具。
jps--(JVM Process Status Tool)
jps(JVM Process Status Tool)用来显示本地的java进程、进程号、进程启动的路径等。
illegal argument: -h
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
-q 只输出进程号
-m 输出虚拟机进程启动时传递给主类的main()函数的参数
-l 输出主类的全名,若进程执行的是jar包,输出jar路径
-v 输出虚拟机进程启动时的jvm参数
jinfo(Configuration Info For Java)
jinfo(Configuration Info For Java)查看和调整虚拟机的各项参数。jinfo可观察运行时java程序的运行环境参数,参数包括Java System属性和JVM命令行参数。
Usage:
jinfo [option] <pid>
(to connect to running process)
jinfo [option] <executable <core>
(to connect to a core file)
jinfo [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
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 of the above
-h | -help to print this help message
eg:jinfo -flag MaxPermSize/PermSize/LargePageSizeInBytes/AllowUserSignalHandlers 进程号
jstat(JVM Statistics Monitoring Tool)
用于监控虚拟机各种运行状态信息的命令行工具。可以显示本地或远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据。
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> 选项,我们一般使用 -gcutil 查看gc情况
<vmid> 对于命令格式中的VMID与LVMID需要特别说明下:如果是本地虚拟机进程,
VMID和LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:
[protocol:][//] lvmid [@hostname[:port]/servername]
<lines> Number of samples between header lines.
<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.
option代表用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况
-class 监视类装载、卸载数量、总空间及类装载所耗费的时间,统计class loader行为信息
-gc 监视java堆状况,包括Eden区、2个Survivor区、老年代、永久代等容量,统计jdk gc是heap信息
-gccapacity 监视内容与gc基本相同,但输出主要关注heap各个区域使用到的最大和最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC的状况
-gcnewcapacity 监视内容与-gcnew一样,输出主要关注使用到的最大和最小空间,新生代heap容量
-gcold 监视老年代GC的状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间,老年代heap容量
-gcpermpacacity 输出永久代使用到的最大和最小空间,permnent区heap容量
-compiler 输出JT编译器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译的方法
在写示例前先介绍参数含义
S0 -Heap上的 Survivor space 0 区已使用空间的百分比
S1 -Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC 从应用程序启动到采样时发生 Young GC 的次数
YGCT 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC 从应用程序启动到采样时发生 Full GC 的次数
FGCT 从应用程序启动到采样时 Full GC 所用的时间
GCT 从应用程序启动到采样时用于垃圾回收的总时间
eg:
*统计 gc heap 情况
[root@localhost ~]# jstat -gcutil 7563
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
*每1000毫秒查询一次进程垃圾收集情况,查询5次
[root@localhost ~]# jstat -gcutil 7563 1000 5
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
0.00 44.10 84.66 60.00 99.53 147 0.570 7 0.721 1.291
*显示加载class的数量,及所占空间
[root@localhost ~]# jstat -class 7563
Loaded Bytes Unloaded Bytes Time
2277 4700.2 0 0.0 1.65
*显示VM实时编译的数量等信息
[root@localhost ~]# jstat -compiler 7563
Compiled Failed Invalid Time FailedType FailedMethod
1599 2 0 55.22 1 org/apache/tomcat/util/IntrospectionUtils setProperty
*显示三代 heap 情况
gccapacity 可以显示 JVM 内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN 显示的是最小 perm 的内存使用量,PGCMX 显示的是 perm 的内存最大使用量,PGC 是当前新生成的 perm 内存占用量,PC 是当前 perm 内存占用量。其他的可以根据这个类推, OC 是 old 内存的占用大小。
[root@localhost ~]# jstat -gccapacity 7563
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
10688.0 171328.0 38464.0 3840.0 3840.0 30784.0 21440.0 342720.0 76820.0 76820.0 21248.0 83968.0 50368.0 50368.0 154 7
jstatd(Java Statistics Monitoring Daemon)java后台统计监测
jstatd(Java Statistics Monitoring Daemon)是一个基于提供远程监控接口的 RMI(Remove Method Invocation,远程方法调用)的服务器程序,它用于监控基于 HotSpot 的 JVM 中资源的创建及销毁过程中资源占用情况,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行,默认端口是 1099。如果需要RMI 日志功能的话,还可以在启动参数中加入 -J-Djava.rmi.server.logCalls=true。
jmap(Memory Map for Java)java内存映像工具
jhat(JVM Heap Analysis Tool) 虚拟机堆转储快照分析工具
其他命令行工具
jar — 打包与解包。
jarsigner — 制作签名文件与验证签名。
javac — java 语言编程编译器。
javah — 用于在 JNI 开发的时,把java代码声明的 JNI 方法转化成 C\C++ 头文件,以便进行 JNI 的 C\C++ 端程序的开发。
javap — 反汇编器,可以查看 java 编译器为我们生成的字节码。
jcontrol — java 控制面板。
jconsole — 是一个基于 JMX 的 GUI 监控工具,用于连接正在运行的 JVM,不过此 JVM 需要使用可管理的模式启动。
jrunscript — 可以执行 JavaScript 脚本,在 JDK 1.6 开始引入。
rmic — java 中 rmi(remote method invoke)的编译命令,rmic 编译的时候跟 javac 不一样,类名一定要写全,比如:rmic com.aa.bb.Test。而且文件名后面不能有 .class。还有这个 class 一定要放在 classpath 下。
jcmd — 它是一个多功能工具,可以用来导出堆,查看 java 进程,导出线程信息,执行 GC 等,在 JDK 1.7 之后引入。jcmd 拥有 与 jmap 的大部分功能,并且 Oracle 官方也建议使用 jcmd 代替 jmap,也可代替 jps 工具。jcmd
jmc — 也是一个基于 JMX 的 GUI 监控工具,在 JDK1.7及以上,仅有Oracle jdk,Oracle公司已经将jrmc改造为jmc工具,也只有 jconsole 和 jmc 工具可以使用。
jvisualvm — 也是一个基于 JMX 的 GUI 监控和分析工具,自从 JDK 6 Update 7 以后已经作为 JDK 的一部分。
一些术语的中文解释
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 : 最大持有次数限制
参考文档:http://blog.chopmoon.com/favorites/225.html