Sun Hotspot JVM
java version "1.6.0_12"
一、vm参数方式
1、-verbose:gc
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。
jvisualvm远程监控资源占用情况
- 监控另外一台windows
在文件java.policy(目录:C:/Program Files/Java/jdk1.6.0_10/jre/lib/security)加入如下代码:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission
java.security.AllPermission;
};
运行cmd:jstatd -J-Djava.security.policy=jstatd.all.policy - 监控另外一台Linux
远程机器启动jstatd
首先需要准备一个java.policy文件,保存/home/admin/jstatd.java.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
启动jstatd
jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-Djava.rmi.server.logCalls=true同时需要执行一个命令看看(linux下)
hostname –i
如果显示是127.0.0.1,则需要修改/etc/hosts文件,去掉对本机名的配置,让本机名解析到它的IP 地址,如10.10.90.4
要对 JDK 6 上运行的应用程序进行性能分析,需要关闭该应用程序的类共享,否则该应用程序可能会崩溃。要关闭类共享,请使用 -Xshare:off 参数启动应用程序。 - 运用JMX监控
在应用程序,如Tomcat的catalina.sh的JAVA_OPTS上增加'-Xshare:off -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false'
SUN官方说明:
jvisualvm: http://java.sun.com/javase/6/docs/technotes/tools/share/jvisualvm.html
jps:http://java.sun.com/javase/6/docs/technotes/tools/share/jps.html
jstat:http://java.sun.com/javase/6/docs/technotes/tools/share/jstat.html
jmap:http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
jconsole:http://java.sun.com/javase/6/docs/technotes/tools/share/jconsole.html