如何使用VisualVM遠程監控和優化Tomcat和Java程序的內存和CPU java
JVisualVM 是Java 繼 JConsole 以後有一款力做,是集成了諸多分析和優化Java程序的工具的工具。 android
咱們能夠用它來爲優化Java程序的內存佔用,找出內存泄漏,分析Java程序的CPU佔用狀況,根據JVisualVM獲取到的數據優化JVM配置等。 總之是至關好了~~~~tomcat
JVisualVM 位於JAVA_HOME/bin目錄下 。 直接運行可打開。 打開後界面以下:安全
因爲JVisualVM 自己就是一個Java程序,因此它也被工具獲取到了,能夠點開看看究竟它長啥樣!服務器
若是Java程序是本地的咱們能夠很方便的監控這些程序。 那程序若是是遠程的,那就要稍微麻煩一點了。
咱們須要在遠程服務器上配置一下JMX或者jstatd纔可使用jvisualvmide
一、 經過jstatd啓動RMI服務工具
配置java安全訪問,將以下的代碼存爲文件 jstatd.all.policy,放到JAVA_HOME/bin中,其內容以下,優化
grant codebase "file:${java.home}/../lib/tools.jar" {spa
permission java.security.AllPermission;線程
};
執行命令jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.8 &(192.168.1.8 爲你服務器的ip地址,&表示用守護線程的方式運行)
jstatd命令詳解 :http://hzl7652.iteye.com/blog/1183182
打開jvisualvm, 右鍵Remort,選擇 "Add Remort Host...",在彈出框中輸入你的遠端IP,好比192.168.1.8. 鏈接成功.
因爲jstatd監控功能有限,須要您可能須要使用JMX遠程監控。
二、經過JMX遠程監控。
進入遠程服務器tomcat配置在啓動文件中加入以下配置:
start ) "$JSVC" $JSVC_OPTS \ -java-home "$JAVA_HOME" \ -user $TOMCAT_USER \ -pidfile "$CATALINA_PID" \ -wait "$SERVICE_START_WAIT_TIME" \ -outfile "$CATALINA_OUT" \ -errfile "&1" \ -classpath "$CLASSPATH" \ "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMP" \ -Dprogram.name="$PROGNAME" \ -Djava.rmi.server.hostname="您的主機IP地址" \ -Dcom.sun.management.jmxremote.port="8534" \ -Dcom.sun.management.jmxremote.authenticate="false" \ -Dcom.sun.management.jmxremote.ssl="false" \ $CATALINA_MAIN exit $? ;;
其中:
-Djava.rmi.server.hostname="您的主機IP地址" \ -Dcom.sun.management.jmxremote.port="8534" \ -Dcom.sun.management.jmxremote.authenticate="false" \ -Dcom.sun.management.jmxremote.ssl="false" \
是新加入的。
其中-Dcom.sun.management.jmxremote.port="8543" 指定了 JMX 啓動的代理端口;這個端口就是 Visual VM 要鏈接的端口
其中-Dcom.sun.management.jmxremote.ssl="false" 指定了 JMX 是否啓用ssl
其中-Dcom.sun.management.jmxremote.authenticate="false" 指定了 JMX 是否啓用鑑權(須要用戶名,密碼鑑權)
而後從新啓動遠程Tomcat程序, 在JVisualVM上添加JMX鏈接就行了。
若是須要使用JMX鑑權:可參考個人另一篇文章:http://hiandroidstudio.blog.51cto.com/5902332/1795340