如何用VisualVM连接远程Tomcat
我的程序运行正常吗?我的程序健康程度如何?我分给它的那些内存和运算资源够它用吗?
在大数据量和高并发的情况下,它能应付吗?
如果你也有同样的疑问,那么你需要常去看看你的程序,你在服务器上还好吗?
强烈推荐Java VisualVM,从JDK1.6开始就已经内置的监控程序,它可以通过JMX和Jstatd两种方式提供远程程序监控(本地程序自然也不在话下)。
1、设置Tomcat的JAVA_OPTS参数:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.154.252.108"
此处IP填的是tomcat所在远程机器的IP(hostname -i ),需要确保这个端口没程序占用。
可以直接把这个参数写入到catalina.sh文件中。
2、添加JMX连接,并填入IP和刚刚设置的端口。
连接完成之后,监视、线程、概述选项卡可以正常显示,也可以添加插件,选择“工具 - 插件”。可以添加新的插件,此处我们添加了一个名叫 Visual GC 的插件,用于监控JVM 的垃圾回收情况。
4、美中不足的是, Visual GC 并不买账,无法显示。
Visual GC uses the jvmstat technology to gather data from the monitored application. This means that the monitored application must either run locally or there must be a jstatd agent up and running on the remote system. For remote applications added using the JMX connection you will only see the "Not supported for this JVM" message - there's no jvmstat available.
使用JMX监控的功能不支持Visual GC,需要以jstatd的方式来监控。
5、使用Jstatd方式关联监控
Jstatd方法是利用后台的RMI守护进程来实现对远程JVM的监控。启动jstatd不复杂,
找到tomcat所在机器的Java目录,在bin目录下首先创建一个监控策略文件:
vi jstatd.all.policy grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
把"${java.home}/../"替换成JAVA安装目录。然后执行如下命令启动jstatd:
jstatd -J-Djava.security.policy=jstatd.all.policy
查看jstatd是否启动:[root@vm-10-154-252-108 bin]# jps -l 127.0.0.1
8618 sun.tools.jps.Jps
7516 sun.tools.jstatd.Jstatd
15815 org.apache.catalina.startup.Bootstrap
7670 org.apache.catalina.startup.Bootstrap
21315 org.apache.catalina.startup.Bootstrap
21481 org.apache.catalina.startup.Bootstrap
11470 org.apache.catalina.startup.Bootstrap
15649 org.apache.catalina.startup.Bootstrap
15732 org.apache.catalina.startup.Bootstrap
21398 org.apache.catalina.startup.Bootstrap
11634 org.apache.catalina.startup.Bootstrap
5、删除VisualVM之前对Tomcat的监控,添加“远程主机”,输入主机IP,通过“高级设置”可以看到远程主机默认是jstatd方式监控的。
点击确定,将会列出该机器上所有的可监控的Java程序,
找到我们需要监控的程序PID,双击: