visualVM连接远程Java虚拟机

1 配置前的准备

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

hostname -i

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

vi /etc/hosts

添加一行

192.168.11.233  mylinux

2 配置JMX

2.1 创建setenv.sh

进入tomcat/bin目录

vi setenv.sh

输入下列内容:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.20.150.218

设置权限

chmod +x setenv.sh

2.2 在server.xml中添加listener

进入tomcat/conf目录

vi server.xml

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

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

2.3 JMX访问控制文件

进入tomcat/conf目录,执行

cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.passwordcp $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

2.4 添加catalina-jmx-remote.jar

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

下载后复制到 tomcat/lib目录

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

2.5 设置防火墙

vi /etc/sysconfig/iptables

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

[java]  view plain  copy
 print ?
  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

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

2.6 测试

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


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

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


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


尝试一下强大的Visual GC插件,很遗憾,提示"不受此JVM支持“,如果想使用这个插件,就需要配置jstatd连接方式,下面来看jstatd的配置。

3 配置jstatd

3.1 配置安全策略

vi $JAVA_HOME/jre/lib/security/java.policy
在文件末位的 }; 前添加
permission java.security.AllPermission;

3.2 启动jstatd

cd $JAVA_HOME/bin
./jstatd -J-Djava.security.policy=all.policy &
启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,如./jstatd -J-Djava.security.policy=all.policy -p 10003 &

3.3设置防火墙

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

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

3.4 测试

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

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


此次JMX连接只输入IP和端口,就可以连接成功

你可能感兴趣的:(java虚拟机)