使用Java VisualVM监控远程JVM(远程服务器为linux配置)

我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少目前有多个监控工具相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具.这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面:

 

从左边Applications树中可以知道,不光可以监控本地JVM运行情况, 还可以监控远程机器上的JVM运行情况.
本地监控:只要打开某个JAVA程序就会自动的加入到本地监控中.

因为本地监控无需配置, 所以这里主要介绍监控远程JVM
要进行远程监控, 本机的VisualVM就必须和远程的JVM要进行通信, Visualvm目前支持两种remote connection方式.
分别是
jstatdJMX方式: 这里我主要介绍的是通过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端口号。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值