深入理解JVM虚拟机——4. 虚拟机性能监控与故障处理工具

4.1 概述

给一个系统定位问题时,知识,经验是关键基础,数据是依据

数据包括:运行日志异常堆栈GC日志线程快照堆转储快照等。


4.2 JDK的命令行工具

本章将介绍bin目录下工具的一部分,主要包括用于监视虚拟机和处理的工具。

4.2.1 jps:虚拟机进程状况工具

jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类的名称以及这些进程的本地虚拟机唯一ID。

jps命令格式:

jps[option][hostid]

jps执行样例:

jps -l
3022 sun.tools.jps.Jps

jps常用其他表项

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

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

jastat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。可以显示类装载、内存、垃圾回收等各种运行数据。

命令格式:

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

参数interval和count代表查询间隔和次数,如果省略这两个参数说明只查询一次。
例如需要没250毫秒查询一次进程2764垃圾收集情况,一共查询20次,则指令是

jstat-gc 2764 250 20

选型option代表用户希望查询的虚拟机信息,主要有三类:类装载垃圾收集运行期编译状况

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

4.2.3 jinfo:Java配置信息查询工具

(Configuration Info for Java)的作用是实时的查看和调整各项虚拟机的参数。

jinfo的命令格式

jinfo[option]pid

执行样例:查询CMSInitiatingOccupancyFraction参数

jinfo-flag CMSInitiatingOccupancyFraction 1444

4.2.4 jmap:Java内存映像工具

jamp(Memory Map fo Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。除了获取dump文件还可以查询finalize执行队列、Java堆和永久代的详细信息等。

jmap命令格式

jamp[option]vmid

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

4.2.5 jhat:虚拟机堆转储快照分析工具

jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置一个微型的HTTP服务器,生成dump文件的分析结果后,可以在浏览器查看。

但是不推荐使用这个功能,因为比较简陋而且耗时,可以使用Visual VM以及专业分析dump文件的EclipseMemoryAnalyzer、IBM HeapAnalyzer等工具。

4.2.6 jstack:Java堆跟踪工具

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(threaddump)。主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源的长时间等待等。

jstack命令格式

jstack[option]vmid

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

猜你喜欢

转载自blog.csdn.net/MoForest/article/details/85054818