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

简介

        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而启动失败;
export JAVA_OPTS="-server
  -Dfile.encoding=UTF-8 \
  -Dcatalina.logbase=/var/log/tomcat7 \
  -Dnet.sf.ehcache.skipUpdateCheck=true \
  -XX:+DoEscapeAnalysis \
  -XX:+UseConcMarkSweepGC \
  -XX:+CMSClassUnloadingEnabled \
  -XX:+UseParNewGC \
  -Xms1536m -Xmx1536m \
  -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password \
  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access \
  -Dcom.sun.management.jmxremote.ssl=false"
4、在tomcat/conf/下新建jmxremote.password和jmxremote.access文件,其中jmxremote. password存放JMX连接时的安全凭证,jmxremote.access标明账号权限;

JVM内存监控:VisualVM远程监控JVM_第1张图片

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

service iptables restart

6、启动tomcat即可。


jstatd连接

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

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};
2、在当前目录(jdk/bin)下,执行如下命令,其中 123.59.46.165 为本机(远程服务器)IP,&表示用守护进程方式运行
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;

JVM内存监控:VisualVM远程监控JVM_第2张图片

4、编辑iptables,打开1099和35934端口,重启iptables。


问题

       配置完之后仍然连接失败,执行hostname -i,如果返回的不是本机IP,则原因在于hostname。

       客户端程序向服务器请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作都是根据这个hostname来连接服务器端。因此如果hostname返回的是局域网IP或127.0.0.1,而客户端不在该局域网内,则会连接失败。


解决

1、编辑/etc/hosts,添加一行,使本机IP和hostname对应;

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


总结

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


你可能感兴趣的:(实习搬砖手札)