如何使用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