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文件,如:
/tmp/jstatd.java.policy grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
啟動遠程服務器上的jstatd進程:
jstatd -J-Djava.security.policy=/tmp/jstatd.java.policy -J-Djava.rmi.server.logCalls=true
然後就可以在客戶端用JAVA VirtualVM進行連接了。
出處:http://stevex.blog.51cto.com/4300375/771990