简介
VisualVM是一个集成多个JDK命令行工具的可视化工具。可以作为Java应用程序性能分析和运行监控的工具。开发人员可以利用它来监控、分析线程信息,浏览内存堆数据。系统管理员可以利用它来监测、控制Java应用程序横跨整个网络的情况。Java应用程序使用人员可以利用它来创建包含所有必要信息的Bug 报告。VisualVM远程监控JVM有两种方式,JMX连接和jstatd连接。配置过程中参考了很多博客资料,然而很多不全且遇到的问题没有说清楚,因此本文主要记录我的完整配置过程以及配置中的注意事项,以便后来。
JMX连接
JMX连接方式参考Apache官网介绍的方法(http://tomcat.apache.org/tomcat-8.0-doc/config/listeners.html#JMX_Remote_Lifecycle_Listener_-_org.apache.catalina.mbeans.JmxRemoteLifecycleListener),以下是我的实际步骤。
1、下载catalina-jmx-remote.jar包(点击下载),放至tomcat/lib文件夹下;
2、编辑tomcat/conf/server.xml,添加监听端口
3、编辑tomcat/bin/catalina.sh,在JAVA_OPTS中添加系统配置,注意,此段配置要加在$CATALINA_BASE定义之后,否则tomcat会因为找不到$CATALINA_BASE而启动失败; 4、在tomcat/conf/下新建jmxremote.password和jmxremote.access文件,其中jmxremote. password存放JMX连接时的安全凭证,jmxremote.access标明账号权限;
5、编辑iptables,打开10001和10002两个端口,重启iptables;
6、启动tomcat即可。
jstatd连接
1、在jdk的bin目录下新建文件jstatd.all.policy文件,编辑内容:
2、在当前目录(jdk/bin)下,执行如下命令,其中 123.59.46.165 为本机(远程服务器)IP,&表示用守护进程方式运行 3、执行命令jps,查看找到jstatd的pid,执行命令netstat -autup | grep pid,查看监听的除默认1099端口外的另一个端口,此处为35934;
4、编辑iptables,打开1099和35934端口,重启iptables。
问题
配置完之后仍然连接失败,执行hostname -i,如果返回的不是本机IP,则原因在于hostname。
客户端程序向服务器请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作都是根据这个hostname来连接服务器端。因此如果hostname返回的是局域网IP或127.0.0.1,而客户端不在该局域网内,则会连接失败。
解决
1、编辑/etc/hosts,添加一行,使本机IP和hostname对应;
2、编辑/etc/sysconfig/network,编辑hostname; 3、执行命令; 4、执行hostname -i查看,返回的应该是本机IP。
总结
至此,服务器端配置结束,客户端打开jvisualvm,连接即可,记得JMX连接需要输入用户名和口令。