JDK中的命令行工具

深入理解Java虚拟机:JVM高级特性与最佳实践 第2版 高清PDF+源码  下载

一,常用JDK监控和故障处理工具 命令名称全称用途
jstat   JVM Statistics Monitoring Tool   用于收集Hotspot虚拟机各方面的运行数据  
jps   JVM Process Status Tool   显示指定系统内所有的HotSpot虚拟机进程  
jinfo   Configuration Info for Java   显示虚拟机配置信息  
jmap   JVM Memory Map   生成虚拟机的内存转储快照,生成heapdump文件  
jhat   JVM Heap Dump Browser   用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果  
jstack   JVM Stack Trace   显示虚拟机的线程快照  
二,命令使用详解

1, jstat:查看虚拟机各云心状态信息

jstat命令可用于显示本地或远程虚拟机进程中的类装载 ,内存,垃圾收集,JIT编译等运行数据。
jstat命令的格式为:

jstat [options vmid [interval[s|ms]] [count] ]

其中若查询的是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程VMID的格式为:
[protocol:][//] lvmind[@hostname [:port] /servername]
可用 jstat -options来查询jstat可以搭配哪些操作选项:
options有:
-class监视类装载,卸载数量,总空间以及类装载所耗费的时间

-gc 监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代的容量,已用空间,GC时间合计等信息

-gccapacity内容与-gc基本相同,但主要输出Java堆各个区域的最大最小空间

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

-gccause内容与-gcutil基本相同,但主要关注已使用空间占总空间的百分比,并输出导致上一次GC的原因

-gcnew监视新生代GC情况

-gcnewcapacity内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcold监视老年代GC情况

-gcoldcapacity内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcpermcapacity输出永久代使用到的最大最小空间

-complier输出JIT 编译器编译过的方法耗时的信息

-printcompliter输出已经被JIT编译的方法

例如:

JDK

其中S0,S1表示Surviver区,E表示新生代Eden区,O表示老年代,YGC表示Young GC,其下面的数字表示GC了多少次,YGCT表示Young GC的耗时,单位为秒,FGC表示Full GC,FGCT表示Full GC的耗时,单位为秒,GCT表示总共的GC时间,为YGCT与FGCT的总和。

2, jps:产看虚拟机进程信息

jps命令可用于查询正在运行的虚拟机进程,同时可选择性的显示虚拟机执行主类,即执行main函数的类,以及进程的本地虚拟机ID(Local Virtual Machine Identifier 简称LVMID)(对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的)
jps的命令格式为:

jps [options] [hostid]

options 有:
-q 只输出本地虚拟机进程ID,省略主类名

-m输出虚拟机进程启动时传递给main()函数的参数

-l输出进程执行的主类的全名

-v输出虚拟机进程启动时的JVM参数

hostid可用于查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名

3, jinfo:查看虚拟机配置参数信息

jinfo用于查看和调整虚拟机的配置参数.
jinfo的命令格式为:

jinfo [option] pid

我们可以用jinfo -flags来查询线程的参数,其中的Non-default VM flags为虚拟机默认的设置参数,Command line为用户自行设置的参数,如下图:

JDK

4, jmap:生成虚拟机内存转储快照

jmap命令用于获取heapdump文件,且可以查询finalize执行队列,Java堆与永久代的一些信息。
jmap的命令格式为:

jmap [option ] vmid

常用的option选项有:
-dump 生成Java堆转储快照,格式为: -dump:[live , ]format=b , file=,其中live子参数 说明只dump出存活的对象

-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象

-heap 显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等

例如:

JDK

5, jhat:分析虚拟机转储快照信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/099e60026c96299668a713e9e7bead6d.html