VisualVM监控远程服务器JVM

来源:互联网 发布:福建游龙网络倒闭了吗 编辑:程序博客网 时间:2024/05/22 10:46

1、安装和介绍

VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回

收运行情况的可视化分析等,对故障排查和性能调优很有帮助。

在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可。

也可以再VisualVM官网下载,并安装。

       下载地址:http://visualvm.github.io/

一个主要运行界面如图:


2、服务器准备

VisualVM会自动检测本机运行中的JVM并建立连接,本文主要介绍连接远程Linux服务器的配置方法,测试环境为CentOS 6.5,JDK8,Tomcat8。

VisualVM连接远程服务器有两种方式:JMX和jstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持CPU监控,实际使用可同时配

置上并按需选用。

window客户端的VisualVM,需要安装一些插件,


3、配置前准备

我们需要先检查linux的hostname匹配的IP,执行

hostname -i

如果匹配的结果是无法识别或者127.0.0.1, 则需要手动配置主机名和IP映射。假设要用于建立连接的IP是192.168.206.130,主机名是mylinux:

vi /etc/hosts

添加一行

192.168.206.130  my

这段很重要,如果忽略可能导致你的VisualVM连接不到你的测试环境的服务器。


4、配置Jstatd


以下操作都是在服务器端(即centos6.5系统),千万别在window操作。

4.1 配置安全策略

 配置java安全访问,将如下的代码存为文件 jstatd.all.policy,放到JAVA_HOME/bin中,其内容如下,
        grant codebase "file:${java.home}/../lib/tools.jar" {

               permission java.security.AllPermission;

          };

4.2 启动jstatd

      cd $JAVA_HOME/bin
执行命令:

nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.206.130 &(192.168.206.130  为你服务器的ip地址,&表示用守护线程的方式运行)

这里需要注意一点,后面的 -J-Djava.rmi.server.hostname=192.168.206.130 不指定也是可以的,但是有可能远程连接不上,所以本人指定了。

jps命令查看下,是否已正常启动jstatd


4.3设置防火墙

除了把1099添加到防火墙规则外,还需要找到另外一个随机端口,也加入到规则中
执行
netstat -anp | grep *jstatd

可以看到除了1099,jstatd还监听了53040端口,把这个也加入到规则中,添加方法参照2.5
(注意:这个随机端口重启后会变化)

如果担心配置的可能会影响远程连接,建议先将防火墙关闭:/etc/init.d/iptables stop

4.4 测试

启动VisualVM,因为在配置JMX时已经添加过服务器节点,如果配置正确,通常VisualVM会自动检测到jstatd连接并添加节点

如果没有自动添加,可以检查端口是否能连通并尝试手动添加连接
VisualGC界面



5、配置JMX


5.1 创建setenv.sh

进入tomcat/bin目录

vi setenv.sh

[java] view plain copy
  1. JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"  
(-Xms512m -Xmx512m不是必须的参数,放在这里只是示意可以连同JVM参数一起调整)

设置权限

chmod +x setenv.sh

5.2 在server.xml中添加listener

进入tomcat/conf目录

vi server.xml

[java] view plain copy
  1. <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />  

端口可根据实际情况修改,添加后的结构如下图

5.3 JMX访问控制文件

进入tomcat/conf目录,执行

cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password

cp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access

然后

vi jmxremote.password

取消以下两行注释
#monitorRole QED
#controlRole R&D

当然也可以不取消这两个账号,直接使用也是可以的,注释和自增加是为了安全考虑

也可以自定义账号,按username password的格式添加一行,这样就需要同时修改jmxremote.access

vi jxmremote.access
在最下面添加
username  readwrite

修改权限

chmod 600 jmxremote.password
chmod 600 jxmremote.access

5.4 添加catalina-jmx-remote.jar

下载地址  http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote

下载后复制到 tomcat/lib目录

至此,配置工作完成,但是还需要把5.2中的两个端口加入到防火墙允许规则中

5.5 设置防火墙

vi /etc/sysconfig/iptables

在-A INPUT -j REJECT --reject-with icmp-host-prohibited前加入

[java] view plain copy
  1. -A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT   
  2. -A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT  
service iptables restart或者/etc/init.d/iptables restart

在客户机上telnet 服务器的10001和10002端口,如果都通就正确了。

为了防止连接不上,我们先选择把防火墙关闭。

5.6 测试

在客户机上启动jvisualvm.exe,在左侧树形菜单的远程上右键 -> 添加远程主机,主机名填写服务器IP


确定后,远程下出现新的子节点,在子节点上右键 -> 添加JMX连接

连接输入IP:10001,注意这个端口是5.2步骤中配置的rmiRegistryPort。勾选使用安全凭证,用户名和口令即5.3步骤中jmxremote.password文件内的用户名和对应密码。勾选保存安全凭证


本文的配置中未启用SSL,点确定后会提示“请确认不用SSL方式尝试连接”,选择“是”。如果一切顺利在服务器节点下出现JMX连接子节点,双击后即可打开功能界面。




结束。。。。。。。