在开发调优过程中,如果使用Java提供的可视化监控工具可能效果会更好点。jvisualvm.exe就是Java默认自带的一款监控工具。使用非常方便。他不仅可以监控本地的Java应用程序,还可以监控远程的Java应用程序,它能在程序运行时获得实时数据,同时,它还能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。下面我们就一块来配置一下它是如何监控远程JVM的。
VisualVM监控远程JVM
复制Java目录下面的jmxremote.password和jmxremote.access文件到$TOMCAT_HOME/conf目录下。
1
2$ cp $JAVA_HOME/jre/lib/management/jmxremote.password.template $TOMCAT_HOME/conf/jmxremote.password
$ cp $JAVA_HOME/jre/lib/management/jmxremote.access $TOMCAT_HOME/conf/jmxremote.access修改jmxremote.password文件的访问权限,此权限要设置为启动tomcat的系统用户的权限,如:启动tomcat使用用户sontek,并且该用户属于sontek组,则jmxremote.password的权限应该只有sontek用户拥有读和访问的权限。
1
$ chmod 600 jmxremote.password
打开jmxremote.password 去掉 #monitorRole QED 和 # controlRole R&D 的注释,这里存放的时候JMX远程授权的用户名和密码,其中用户名monitorRole 密码QED的只能普通监控,没办法用抽样器进行cpu,内存抽样,而用户名为controlrole 是具有所有权限的。此处也可以自定义用户名和密码,其权限要和jmxremote.access相对应。例如:
1
2
3
4
5
6
7
8
9
10
11jmxremote.password文件
monitorRole QED
controlRole R&D
sontekliu 123 #自定义用户和密码
-----------------------------------
jmxremote.access文件
monitorRole readonly
controlRole readwrite
sontekliu readwrite # 自定义用户权限在TOMCAT_HOME/bin目录下的catalina.sh中添加如下配置。首先找到如下一行:
1
# OS specific support. $var _must_ be set to either true or false.
在该行上面添加如下配置(可不在一行):
1
2
3
4
5
6
7
8CATALINA_OPTS="
-Djava.rmi.server.hostname=192.168.2.27 (JMX绑定远程主机)
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=5000 (JMX远程监听端口,可随意配置)
-Dcom.sun.management.jmxremote.ssl=false (禁止使用ssl)
-Dcom.sun.management.jmxremote.authenticate=true (启用用户验证,不启用则改为false,下面两项也无需配置)
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password (用户验证的用户名和密码)
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access(用户所拥有的权限)"注意:复制该内容时,请去掉括号以及括号内容。
一定是CATALINA_OPTS,设置成JAVA_OPTS也可以,但是在执行shutdown.sh的时候会抛出异常,不建议使用JAVA_OPTS。. 重启Tomcat使其配置生效。
. 使用jvisualvm.exe监控远程JVM
连接远程JVM,如图:
效果图如下:
参考文档:
[Tomcat官方][http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html]