需要特别说明的是,下面介绍的工具全部基于windows平台下的JDK 1.6 Update 21,如果JDK版本,操作系统不同,工具所支持的功能可能会有较大差别。大部分工具在JDK1.5就以经提供。如果读者是JDK1.5版本的,在程序启动时请添加参数 “-Dcom.sun.management.jmxremote”开启JMX管理功能,否则部分工具是基于JMX他们将无法使用,JDK1.6后是默认开启定的。
jps -q 只输出LVMID,省略主类的名称
jps -l 输出LVMID与进程的路径或者jar包
jps -m 输出虚拟机每个进程启动时传入的mian()函数的参数
jps -v 输出虚拟机每个进程启动时JVM参数下面看具体执行情况
二:jstat 虚拟机统计信息监视工具
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程的类装载,内存,垃圾收集,JIT编译等运行数据,以纯文本显示。它将是运行期定位虚拟机性能问题的首选工具。
格式: jstat [option vmid [interval[s|ms] [count] ] ] option表示指令 vmid 表示进程号 interval表示间隔时间(默认毫秒jstat中option选项参数以及含义
选项 | 作用 |
-class | 监视类转载,卸载数量,总空间以及类转载所耗费的时间 |
-gc | 监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息 |
-gccapacity | 监视内容与-gv基本相同,但输出主要关注Java堆各个区域使用到的最大,最小空间 |
-gcutil | 监视内容与-gv基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与gcutil功能一样,但是会额外输出导致上一次gc产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出关注使用的最大最小空间 |
-gcold | 监视老年代GC情况 |
-gccoldcapacity | 监视内容与gccold基本相同,输出关注使用的最大最小空间 |
-gcpermcapacity | 输出永久代使用到的最大,最小空间 |
-compiler | 输出JIT编译器编译过的方法,耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
下面看具体列子警告原因是在windows系统不兼容,不影响
C:\Users\GH>jstat -class 2024
Loaded Bytes Unloaded Bytes Time
318 363.8 0 0.0 0.03
C:\Users\GH>jstat -gc 2024
Warning: Unresolved Symbol: sun.gc.metaspace.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.metaspace.used substituted NaN
Warning: Unresolved Symbol: sun.gc.compressedclassspace.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.compressedclassspace.used substituted NaN
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
64.0 64.0 0.0 0.0 896.0 502.9 4096.0 0.0 - - - - 0 0.000 0 0.000 0.000
C:\Users\GH>jstat -gcutil 2024
Warning: Unresolved Symbol: sun.gc.metaspace.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.metaspace.used substituted NaN
Warning: Unresolved Symbol: sun.gc.metaspace.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.compressedclassspace.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.compressedclassspace.used substituted NaN
Warning: Unresolved Symbol: sun.gc.compressedclassspace.capacity substituted NaN
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 56.13 0.00 - - 0 0.000 0 0.000 0.000
C:\Users\GH>
jinfo(Configure Info For Java)的作用是实时查看和调整虚拟机各项参数。这个工具只有在jdk1.6的工具才会有作用。使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了找资料外,就只能使用jinfo的-flag选项进行查询了。
格式 jinfo [option] pid option参数为JVM配置参数
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为headdump或dump文件)。还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
jmap格式 jmap [option] vmid
jmap的选项:
-dump 生成Java堆转储快照。格式为:-dump:[live, ] format=b, file=
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效
-heap 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效
-histo 显示堆中对象统计信息,包括类、实力数量、合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照,只在Linux/Solaris平台下有效
jhat(JVM Heap Analysis Tool)与jmap搭配使用,分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。不过在实际中不使用jhat来分析dump,主要原因:1.一般不在部署应用的服务器上直接分析dump文件,而要复制到其他机器上进行分析,因为是耗时且消耗硬件资源。2.jhat功能比较简陋,如VisualVM,Eclipse Momery Analyzer、IBM HeapAnalyzer等都更强大。
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待什么资源。
Jconsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。
VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理工具。