日期:2014-05-16  浏览次数:20381 次

通过jstat工具来查看jvmstat monitor的值
接上之前发的几帖(1)  (2)  (3),再回过头来看看如果不是用Java API,有没有什么工具能直接看到某个Java进程的jvmstat的各个monitor的值。

Sun JDK自带的jstat工具其实就可以看到HotSpot支持的所有jvmstat信息,只不过官方文档上没把相关的隐藏参数写出来而已。

下面还是用例子来说明。这次的目标是查看一个跑在Windows XP SP3, Sun JDK 6 update 17上的Eclipse的状况。

首先用jps工具查出Eclipse进程的vmid:
D:\>jps
1028 Jps
1996 org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar


好,目标就是ID为1996的进程。然后使用jstat,加上一个文档上没记录的-snap参数:
D:\>jstat -snap 1996
java.ci.totalTime=11274276735
java.cls.loadedClasses=15981
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=53
java.property.java.class.path="D:\editor\eclipse_jee\plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar;lombok.jar"
java.property.java.endorsed.dirs="C:\sdk\Java\jdk1.6.0_17\jre\lib\endorsed"
java.property.java.ext.dirs="C:\sdk\Java\jdk1.6.0_17\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext"
java.property.java.home="C:\sdk\Java\jdk1.6.0_17\jre"
java.property.java.library.path="C:\sdk\Java\jdk1.6.0_20\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Perl\site\bin;C:\Perl\bin;D:\sdk\Python31\;D:\sdk\Ruby\bin;;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\sdk\SlikSvn\bin\;C:\sdk\TortoiseSVN\bin;C:\sdk\TortoiseHg;C:\sdk\Git\cmd;D:\sdk\ChezScheme7.4d\bin\i3nt;C:\sdk\Graphviz2.26.3\bin;D:\sdk\GnuWin32\bin;C:\Program Files\Haskell\bin;D:\sdk\ghc-6.10.4\bin;D:\sdk\apache-maven-2.2.1\bin;D:\sdk\Python31\Scripts;D:\script;D:\sdk\apache-ant-1.7.1\bin"
java.property.java.version="1.6.0_17"
java.property.java.vm.info="mixed mode"
java.property.java.vm.name="Java HotSpot(TM) Client VM"
java.property.java.vm.specification.name="Java Virtual Machine Specification"
java.property.java.vm.specification.vendor="Sun Microsystems Inc."
java.property.java.vm.specification.version="1.0"
java.property.java.vm.vendor="Sun Microsystems Inc."
java.property.java.vm.version="14.3-b01"
java.rt.vmArgs="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -javaagent:lombok.jar -Xbootclasspath/a:lombok.jar -XX:MaxPermSize=256m"
java.rt.vmFlags=""
java.threads.daemon=18
java.threads.live=23
java.threads.livePeak=33
java.threads.started=3743

这里已经可以看到很多信息,像是HotSpot的动态编译器用了多少时间,整个VM加载了多少个类卸载了多少个类,启动路径、参数,VM的版本等。不过前面一帖的列表里明明有更多的monitor,它们跑哪儿去了呢?

于是再多加一个-J-Djstat.showUnsupported=true参数来跑jstat:
D:\>jstat -J-Djstat.showUnsupported=true -snap 1996
java.ci.totalTime=11274276735
java.cls.loadedClasses=15981
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=53
java.property.java.class.path="D:\editor\eclipse_jee\plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar;lombok.jar"
java.property.java.endorsed.dirs="C:\sdk\Java\jdk1.6.0_17\jre\lib\endorsed"
java.property.java.ext.dirs="C:\sdk\Java\jdk1.6.0_17\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext"
java.property.java.home="C:\sdk\Java\jdk1.6.0_17\jre"
java.property.java.library.path="C:\sdk\Java\jdk1.6.0_20\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Perl\site\bin;C:\Perl\bin;D:\sdk\Python31\;D:\sdk\Ruby\bin;;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\sdk\SlikSvn\bin\;C:\sdk\TortoiseSVN\bin;C:\sdk\TortoiseHg;C:\sdk\Git\cmd;D:\sdk\ChezScheme7.4d\bin\i3nt;C:\sdk\Graphviz2.26.3\bin;D:\sdk\GnuWin32\bin;C:\Program Files\Haskell\bin;D:\sdk\ghc-6.10.4\bin;D:\sdk\apache-maven-2.2.1\bin;D:\sdk\Python31\Scripts;D:\script;D:\sdk\apache-ant-1.7.1\bin"
java.property.java.version="1.6.0_17"
java.property.java.vm.info="mixed mode"
java.property.java.vm.name="Java HotSpot(TM) Client VM"
java.property.java.vm.specification.name="Java Virtual Machine Specification"
java.property.java.vm.specification.vendor="Sun Microsystems Inc."
java.property.java.vm.sp