虚拟机性能监控与故障处理工具

JDK命令行工具

​ jdk监控和故障处理工具

名称 主要作用
jps 显示指定系统内所有的HotSpot虚拟机进程
jstat 用于收集HotSpot虚拟机各方面的运行数据
jinfo 显示虚拟机配置信息
jmap 生成虚拟机内存转储快照(heapdump)文件
jhat 用于分析heapdump文件,它会建立一个服务器,让用户可以在浏览器上查看分析结果
jstack 显示虚拟机的线程快照

jps:虚拟机进程状况工具

jps命令格式:

1
jps [options][hostid]

其中hostid为RMI注册表中注册的主机名,jps其它常用选项如下:

选项 作用
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传给主类main方法的参数
-l 输出主类的全名,若进程执行的是jar包,输出jar路径
-v 输出虚拟机进程启动时JVM参数

jstat:虚拟机统计信息监视工具

jstat命令格式:

1
jstat [option vmid [interval [s|ms] [count]]]

注:

  • 若为本地虚拟机进程,VMID和LVMID是一致的,若是远程虚拟机进程,VMID格式为:
1
[protocol:][//]lvmid[@hostname[:port]/servername]
  • intervalcount表示查询间隔次数,若不填只查询一次,如 jstat -gc 3243 250 20 表示每个250毫秒查询进程3243的垃圾收集状况,一共查询20次。

option选项以及参数请参考下表:

选项 作用
-class 监视类装载,卸载数量,总空间以及类装载所消耗的时间。
-gc 监视java堆状况,包括堆中各个区域容量,已用空间,GC时间合计等。
-gccapacity 监视内容和-gc基本相同,但主要关注各个区域使用的最大,最小空间。
-gcutil 监视内容和-gc基本相同,但主要关注各个区域已使用空间占总空间的百分比。
-gccause 与-gcutil一样,但会额外输出上一次gc产生的原因。
-gcnew 监视新生代gc状况。
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间。
-gcold 监视老年代gc状况。
-gcoldcapacity 监视内容与-gcold基本相似,输出主要关注使用到的最大,最小空间。
-gcpermcapacity 输出永久代最大,最小空间。
-compiler 输出JIT编译器编译过的方法,耗时等信息。
-printcompilation 输出已经被JIT编译的方法

jinfo:Java配置信息工具

jinfo命令格式:

1
jinfo [option] pid

如查询CMSInitiatingOccupancyFraction参数值:

1
jinfo -flag CMSInitiatingOccupancyFraction 1444

jmap:Java内存映射工具

jmap命令格式:

1
jmap [option] vmid

option参数如下表:

选项 作用
-dump 生成java堆转储快照,格式:-dump:[live,]format=b, file=,live参数说明是否只dump出存活对象。
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在linux/solaris平台下有效。
-heap 显示java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效。
-histo 显示堆中对象统计信息,包括类,实例数量、合计容量。
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在linux/solaris平台下有效。
-F 当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照。

jstack:Java堆栈跟踪工具

jstack命令格式:

1
jstack [option] vmid

option选项如下表:

选项 作用
-F 当正常输出的请求不被响应时,强制输出线程堆栈。
-l 除堆栈外,显示关于锁的附加信息。
-m 如果调用本地方法的话,可现实C/C++的堆栈。

JDK可视化工具

​ 除了命令行工具外,还可以使用bin目录下的jconsole或者使用VisualVM等可视化工具对虚拟机进行监视。