注:本博文主要是基于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多合一故障工具