五、JVM(HotSpot)虚拟机性能监控与故障处理工具

注:本博文主要是基于JDK1.7会适当加入1.8内容。

系统问题定位时,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。

1、JDK命令行工具

(1)jps虚拟机进程状况工具,JVM Process Status Tools,显示指定系统内所有的HotSpot虚拟机进程。类似于Unix/Linux中的ps命令显示指定系统中所有进行的进程。
格式:jps [options] [hostid]
options选项:

参数 描述
-q 输出LVMID(Local Virtual Machine Identifier),即本地虚拟机唯一ID
-m 输出虚拟机进程启动时,传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的jar包,输出jar的路径
-v 输出虚拟机进程启动时JVM参数,jinfo也有类似功能

(2)jstat虚拟机统计信息监视工具,JVM Statistics Monitoring Tools,监视虚拟机各种运行状态信息的命令行工具。
格式:jstat [option vmid [interval[s|ms] [count]]],说明,如果是本地虚拟机则LVMID与VMID是一致的,如果是远程虚拟机则VMID格式为[protocol:][//]lvmid[@hostname[:port]/servername]
option选项:

参数 描述
-class 监视类装载、卸载数量,总空间以及类装载消耗的时间
-gc 监视Java堆状况,包括Eden、两个Survivor,老年代、永久代(JDK1.8中被Metaspace取代)等的容量,已用容量,GC时间合计等信息
-gccapacity 监视内容与-gc类似,但输出主要关注Java堆各个区域用到的最大空间和最小空间
-gcutil 监视内容与-gc类似,但输出主要关注Java堆各个区域已使用空间占总空间的百分比
-gccause 与-gcutil一样,但会额外输出上一次导致gc产生的原因
-gcnew 监视新生代GC存储空间情况
-gcnewcapacity 监视内容与-gcnew类似,但输出主要是关注Java堆新生代使用到的最大空间和最小空间
-gcold 监视老年代GC存储空间情况
-gcoldcapacity 监视内容与-gcold类似,但输出主要关注Java堆老年代使用到的最大空间和最小空间
-gcpermcapacity(JDK1.8移除) 监视永久代存储空间情况,但主输出主要关注Java堆永久代使用到的最大空间和最小空间
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译的方法

(3)jinfo配置信息工具,JVM Configuration Info for Java,实时查看和调整虚拟机各个参数。
格式:jinfo [option] pid
类似于jps -v pid,jinfo也可以显示Java启动时的参数,JDK1.6以上通过-XX:PrintFlagsFinal查看参数默认值,-sysprops将虚拟机进程System.getProperties()内容打印。使用jinfo时,可以使用jinfo -flag特定参数pid显示该参数的数值。

(4)jmap内存映射工具,Memory Map for Java,用于生成堆转存储快照。如果不想使用jamp获取dump文件,有一个其他方式-dump,-XX:HeapDumpOutOfMemoryError参数,当出现堆内存异常或者Linux系统中kill -3 pid,都会出现dump。
格式:jmap [option] vmid
option选项:

参数 描述
-dump 生成Java堆转存储快照,格式为-dump:[live,] format=b, file=,其中live说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue(调用finalize方法后会将对象放入F队列中),等待finalizer线程执行的finalize方法对象
-heap 显示Java堆详细信息,如使用哪种参数、参数配置、分代状况等
-permstat(JDK1.8移除) 以ClassLoader为统计口径显示永久代内存状况
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照信息

(5)jhat虚拟机堆转存储快照分析工具,JVM Heap Analysis Tools,建议使用VisualVM配合分析堆转储快照

(6)jstack堆栈跟踪工具,Stack Track for Java,命令用于生成当前时刻虚拟机的线程快照。
格式:jstack [option] vmid
option选项:

参数 描述
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附件信息
-m 如果调用本地方法的话,可显示C/C++堆栈

2、JDK可视化工具

  • JConsole监视与管理控制台
  • VisualVM多合一故障工具

猜你喜欢

转载自blog.csdn.net/zhangwei408089826/article/details/81632642
今日推荐