JVM内存监控:VisualVM远程监控JVM

来源:互联网 发布:数据库长整型 编辑:程序博客网 时间:2024/05/18 01:20

简介

        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,添加监听端口

[html] view plain copy
  1. <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  
  2.           rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />  
3、编辑tomcat/bin/catalina.sh,在JAVA_OPTS中添加系统配置,注意,此段配置要加在$CATALINA_BASE定义之后,否则tomcat会因为找不到$CATALINA_BASE而启动失败;
[html] view plain copy
  1. export JAVA_OPTS="-server  
  2.   -Dfile.encoding=UTF-8 \  
  3.   -Dcatalina.logbase=/var/log/tomcat7 \  
  4.   -Dnet.sf.ehcache.skipUpdateCheck=true \  
  5.   -XX:+DoEscapeAnalysis \  
  6.   -XX:+UseConcMarkSweepGC \  
  7.   -XX:+CMSClassUnloadingEnabled \  
  8.   -XX:+UseParNewGC \  
  9.   -Xms1536m -Xmx1536m \  
  10.   -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password \  
  11.   -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access \  
  12.   -Dcom.sun.management.jmxremote.ssl=false"  
4、在tomcat/conf/下新建jmxremote.password和jmxremote.access文件,其中jmxremote.password存放JMX连接时的安全凭证,jmxremote.access标明账号权限;


5、编辑iptables,打开10001和10002两个端口,重启iptables;

[html] view plain copy
  1. service iptables restart  

6、启动tomcat即可。


jstatd连接

1、在jdk的bin目录下新建文件jstatd.all.policy文件,编辑内容:

[java] view plain copy
  1. grant codebase "file:${java.home}/../lib/tools.jar" {  
  2.     permission java.security.AllPermission;  
  3. };  
2、在当前目录(jdk/bin)下,执行如下命令,其中123.59.46.165为本机(远程服务器)IP,&表示用守护进程方式运行
[html] view plain copy
  1. jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=123.59.46.165 &  
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对应;

[html] view plain copy
  1. 123.59.46.165   fraborna  
2、编辑/etc/sysconfig/network,编辑hostname;
[html] view plain copy
  1. HOSTNAME=fraborna  
3、执行命令;
[html] view plain copy
  1. hostname fraborna  
4、执行hostname -i查看,返回的应该是本机IP。


总结

       至此,服务器端配置结束,客户端打开jvisualvm,连接即可,记得JMX连接需要输入用户名和口令。

原创粉丝点击