使用Java VisualVM监控远程JVM(远程服务器为linux配置)
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具.这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面:
从左边Applications树中可以知道,不光可以监控本地JVM运行情况, 还可以监控远程机器上的JVM运行情况.
本地监控:只要打开某个JAVA程序就会自动的加入到本地监控中.
因为本地监控无需配置, 所以这里主要介绍监控远程JVM
要进行远程监控, 本机的VisualVM就必须和远程的JVM要进行通信, Visualvm目前支持两种remote connection方式.
分别是jstatd和JMX方式: 这里我主要介绍的是通过JMX方式.
通过JMX连接远程机器, 需要经过下面的配置:
1. 修改远程机器JDK配置文件 (我这里远程机器是linux).
a.进入JAVA_HOME\jre\lib\management\目录
b.拷贝jmxremote.password.template这个文件到当前目录, 并改名为jmxremote.password
c.打开jmxremote.password文件,去掉 # monitorRole QED 和 # controlRole R&D 这两行前面的注释符号
2. 修改远程机器上需要被监控的程序的配置文件 (我这里是监控Tomcat容器内部署的应用).
a.进入TOMCAT_HOME\bin目录
b.打开catalina.sh文件,加入如下信息:
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=172.16.1.53 -Dcom.sun.management.jmxremote.rmi.port=9999"
各参数含义:
- -Djava.rmi.server.hostname=172.16.1.53 :远程服务器的主机名;
- -Dcom.sun.management.jmxremote :是否支持远程JMX访问,默认true;
- -Dcom.sun.management.jmxremote.port :是JMX远程监控端口号,需要在防火墙开放该端口;
- -Dcom.sun.management.jmxremote.ssl=false :表示是否对连接开启SSL加密,默认开启;
- -Dcom.sun.management.jmxremote.authenticate=false :是否需要开启用户认证,默认开启,如果开启需要额外配置授权文件;
- -Dcom.sun.management.jmxremote.rmi.port=9999 :RMI端口号,JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口,可以和JMX端口号相同。
c.重启Tomcat服务.
3、配置主机名
使用 hostname -i 命令查看主机名是否为外网访问ip 172.16.1.53 :
[root@localhost bin]# hostname -i
::1 127.0.0.1
发现是127.0.1.1,所以需要修改主机名为172.16.1.53
修改 /etc/hosts 文件
原文件内容为:
[root@localhost bin]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改 127.0.0.1 为 172.16.1.53 ,并删除第二行ipv6的配置,即修改后文件内容为:
[root@localhost bin]# cat /etc/hosts 172.16.1.53 localhost localhost.localdomain localhost4 localhost4.localdomain4
此时使用 hostname -i 命令再次查看主机名,已经修改过来了:
[root@localhost ~]# hostname -i
172.16.1.53
4、开放端口(centos7)
开放9999端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=9999/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost bin]# firewall-cmd --zone=public --list-ports
8001/tcp 8000-9999/tcp 18999/tcp 9999/tcp
centos6则如下配置:
配置防火墙开放9999端口,编辑 /etc/sysconfig/iptables 文件,加入 -A INPUT -m state --state NEW -m tcp -p tcp --dport9999 -j ACCEPT ,然后 service iptables restart 重启防火墙服务
5、配置jvisualvm
启动tomcat后,在windows本地jdk安装路径bin目录下找到 jvisualvm.exe ,双击打开后左侧显示如下:
在“远程”上右键-->添加远程主机-->填写主机名:
点击确定后,远程选项下多了一条刚才添加的主机列表。右键-->添加JMX连接,如下图,填入JMX远程连接端口号 9999 ,并勾选“不要求ssl连接”:
双击该连接,在右侧可以动态查看jvm的概览信息,监控CPU,java堆,元空间,类,线程等数据:
6、常见问题
在添加JMX连接的时候,经常会出现如下报错:
此时可以从以下几个方向检查:
(1)检查tomcat应用是否启动,或者修改tomcat配置后是否重启tomcat,确保9999端口处于监听状态,查看命令 netstat -nl|grep 9999 ;
(2)检查主机名是否和tomcat中配置的主机名相同,如果不同则按照第二步修改主机名;
(3)检查RMI端口号端口号是否在防火墙进行了配置,如果配置的RMI端口号和JMX端口号不一致,需要在防火墙配置RMI端口号允许访问,如果没有配置,则添加 -Dcom.sun.management.jmxremote.rmi.port=9999 配置RMI端口号。
更多推荐
所有评论(0)