一、前言

使用VisualVM监控远程主机,主要是要在远程主机上部署JMX服务和jstat服务,jstat服务的部署花了我半天的时间,而且,网上的资基本都是缺胳膊少腿的,没有一篇是一个整体(行得通的)。

二、环境

1.客户端

JDK1.8

2.服务端

JDK1.8

阿里云主机,CentOS7

公网IP:37.19.213.44 私有IP:192.168.0.58 (这两个网络很重要)

确定服务器的主机名和IP是对应的,如下:

1 hostname -i
2 
3 # 如果匹配的结果是无法识别或者127.0.0.1, 则需要手动配置主机名和IP映射,假设主机名是alibaba
4 
5 vim /etc/hosts
6 # 添加一行。记住这里填的是私有IP,不能是公有IP,不能是公有IP,否则你会被坑得连自己姓什么都不知道。  一般默认会有一条这样的记录
7 192.168.0.58  alibaba

三、修改服务器配置

1.修改catalina.sh文件

进入tomcat中的bin目录,修改catalina.sh文件

1 cd /usr/local/tomcat/apache-tomcat-7.0.93/bin/
2 vim catalina.sh
3 # 添加如下配置:
4 CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false 
5 -Dcom.sun.management.jmxremote.authenticate=false
6 -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password 
7 -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access 
8 -Djava.rmi.server.hostname=37.19.213.44"

 

配置参数说明:

# -Dcom.sun.management.jmxremote.ssl 是否开启ssl传输,设为false即可
# -Dcom.sun.management.jmxremote.authenticate 是否校验,设为false即可
# -Dcom.sun.management.jmxremote.password.file 远程登录的账号、密码管理文件,下文会讲到如何获取
# -Dcom.sun.management.jmxremote.access.file 远程登录的账号权限管理文件,下文会讲到如何获取
# -Djava.rmi.server.hostname 这个很重要,如果不填的话,可以重启成功,按时客户端的jvisual是无法远程连接上的,这里的IP必须是公网IP,公网IP

配置截图:

 

2.添加jmx的端口监听

进入tomcat中的conf目录,修改server.xml文件。添加如下的监听配置。其中10001和10002是自定义的两个端口,用于远程连接需要。

1 <!-- 远程监控 -->
2 <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

配置截图:

 

3.添加jmx的访问控制文件

# 进入tomcat/conf的目录
# 执行以下命令
# 复制jmxremote.password、jmxremote.access两个文件到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 passwd,如我想要添加一个zexin的账号,密码是123
vim jmxremote.password
# 在最后一行添加
# 格式为:账号 密码(中间用空格隔开) origin admin # 修改完jmxremote.password文件,还要修改jmxremote.access文件,添加权限 origin readwrite # 给予读写jmxremote.password、jmxremote.password文件的权限,如果没有读写的权限程序会抛异常 chmod
600 jmxremote.password chmod 600 jmxremote.access

4.添加catalina-jmx-remote.jar

这里需要注意,可能会出现版本冲突的问题。我下载的7.0的版本,下载后copy到tomcat/lib目录

catalina-jmx-remote.jar下载地址

5.配置防火墙

阿里云:把10001、10002这两个端口加入到安全组

本地虚拟机:修改防火墙配置文件

1 vi /etc/sysconfig/iptables
2 -A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT 
3 -A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT
1 # 重启防火墙
2 service iptables restart

然后 重启Tomcat

四、本地开启远程监控(测试)

添加远程主机:

 

添加JMX连接:

 

成功连接:

 

GC不受此JVM支持:

我找的很多都没有得到解决。

 

五、插件安装

注意:由于java.net网站已关闭,无法在线安装插件。visualvm已经迁移到了github上,地址是https://visualvm.github.io/index.html

点击Plugins进入插件页面

找到对应的JDK版本地址点击进去,例如:java version "1.8.0_201"

选择你要安装的插件下载:

 

打开jvisualvm选择:工具 ——> 插件 ——> 已下载 ——> 添加插件 ——> 选择下载好的插件

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!