Virtual VM是JDK6 Update7之后推出的工具,有集合其它JDK工具的倾向,目前JDK7的版本已经支持绝大部分的监控功能,好像还不能像Jprofile和Youkit那样支持实时跟踪内存堆栈来定位内存泄露问题。

 

对于远程应用的连接,Virtual VM提供两种方式:JMX和jstatd,下面介绍这两种连接的配置。

  • JMX:

在远程服务器上的 jdk 目录下的jre/lib/management下找到jmxremote.password.template文件,然后将其复制为pwd.file指向的文件(如:cp ./jmxremote.password.template /jmx/jmx.pwd),在jmx.pwd文件最后一行加入用户名和密码,格式为:用户名 密码 

如:jmx  jmx

增加JVM参数

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port=6789" 

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.pwd.file=/jmx/jmx.pwd"  

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.ssl=false" 

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.authenticate=false" 

最后重启远程服务器应用后,就可以用JAVA VirtualVM连接了。

 

  • jstatd:

在远程服务器上创建一个java.policy文件,如:

 

   
   
   
   
  1. /tmp/jstatd.java.policy 
  2. grant codebase "file:${java.home}/../lib/tools.jar" { 
  3.    permission java.security.AllPermission; 
  4. }; 

 

启动远程服务器上的jstatd进程:

 

   
   
   
   
  1. jstatd -J-Djava.security.policy=/tmp/jstatd.java.policy -J-Djava.rmi.server.logCalls=true 

然后就可以在客户端用JAVA VirtualVM进行连接了。