本文以windwos平台、查看本地java进程为前提。
- 下载jvmstat3.0
jdk的工具集中包含相关的命令,但是不含图形工具visualgc,要使用图形工具需要下载jvmstat工具。
jvmstat3.0下载地址 http://www.oracle.com/technetwork/java/jvmstat-142257.htm
注意:我使用的jdk版本为1.7,先前下载了jvmstat2.0,运行visualgc出错,似乎是jdk和jvmstat不匹配,所以大家还是下载最新的jvmstat3.0
报错信息如下:
C:\>visualgc.cmd 5868
Could not attach to 5868
Could not attach to 5868 : com.sun.jvmstat.perfdata.monitor.PerfDataBufferImpl2_
0
- 安装 jvmstat3.0
下载好jvmstat3.0后就解压到硬盘上吧,比如解压路径为 d:\jvmstat
说是安装,其实就是设置一些环境变量。我把环境变量的设置写在了一个批处理文件中。
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17 rem 如果读者的环境中已经正确设置了这个变量,这句可以省掉。
SET JVMSTAT_JAVA_HOME=%JAVA_HOME% rem 这句很重要,jvmstat的关键设置
SET JVMSTAT_HOME=d:\JVMSTAT
SET PATH=%PATH%;d:\JVMSTAT\BAT\;%JAVA_HOME%\bin;
jps rem 用来查看一下当前机器上的 JAVA进程,主要是查看一下进程号
cmd rem 这句是为了让批处理运行完后不自动退出,还允许用户在这个窗口中继续输入命令
通过上面的批处理文件的示例,相信大家都知道如何设置安装了。当然大家也可以在环境变量-->系统变量中直接设置好环境变量 JAVA_HOME、JVMSTAT_JAVA_HOME、PATH。
- 运行visualgc工具
确保环境变量设置成功,可以通过jps命令(这个命令式jdk自带的,位置在 JAVA_HOME\bin下)查看当前有哪些java进程。
然后运行visualgc命令。 visualgc <pid>
运行界面如下图,
注意:Histogram窗口在jvm采用“-XX:+UseSerialGC”(串行收集器 )垃圾收集器时才会出现。采用其它类型收集器时,Histogram功能不支持。
- 监测远程服务器上的JVM
被监测服务器上可以不安装jvmstat3.0.
在被监测服务器上新建文本文件 jstatd.policy(比如 c:\jstatd.policy) , 其内容如下
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
你需要保证被监测服务器上环境变量 JAVA_HOME被正确设置。
然后在被监测服务器上运行如下命令(jstatd命令jdk自带,位置在JAVA_HOME\bin下),运行这个命令的窗口不要关闭
jstatd -J-Djava.security.policy=c:\jstatd.policy
如果要后台运行这个命令,可以在这句命令前加个 start /b,执行的命令为
start /b jstatd -J-Djava.security.policy=c:\jstatd.policy
在被监测服务器上 用jps命令查看java进程号;
然后就可以用visualgc 监测远程jvm了,其完整命令格式是 visualgc <pid>@<remoteIP>
示例命令如下
visualgc 2004@10.10.33.22
运行如上命令后就会出现如上图的窗口了。
- visualvm中的visualgc