Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控

jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息。

一、配置tomcat

  在tomcat的bin目录下catalina.sh文件开头加上如下配置:

CATALINA_OPTS=”$CATALINA_OPTS \
-Djava.rmi.server.hostname=你的服务器IP地址 \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.rmi.port=9999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false”

  关键参数说明:

-Dcom.sun.management.jmxremote.authenticate 和 -Dcom.sun.management.jmxremote.ssl:这里设置为 false 是为了简化测

-Djava.rmi.server.hostname:指定服务器的 IP 地址(替换为实际的公网或内网 IP),确保外部客户端可以访问。

-Dcom.sun.management.jmxremote.port:指定 JMX 监听的端口号(如 9999,需与 Tomcat 默认业务端口区分开)。

-Dcom.sun.management.jmxremote.rmi.port非常重要。JMX 默认会动态分配 RMI 数据传输端口,将其固定为与主端口相同的值,可避免防火墙拦截随机端口导致连接失败的问题2。

二、配置防火墙

  配置防火墙开放9999端口:

# 插入一条规则到 INPUT 链,允许 TCP 协议访问 9999 端口
sudo iptables -I INPUT -p tcp --dport 9999 -j ACCEPT

# 保存规则(防止重启服务器后失效)
# CentOS/RHEL:
sudo service iptables save
# Ubuntu/Debian:
sudo netfilter-persistent save

然后service iptables restart重启防火墙服务。

如firewall,使用以下命令

sudo firewall-cmd --zone=public --add-port=9999/tcp --permanent

三、方案 B:也可不修改catalina.sh文件,通过创建 setenv.sh(推荐法,符合官方规范)

根据 catalina.sh 脚本开头的注释提示(Do not set the variables in this script. Instead put them into a script setenv.sh),最佳实践是在 bin 目录下创建一个 setenv.sh 文件。Tomcat 启动时会自动加载它,且不会破坏原脚本。

  1. 在 Tomcat 的 bin 目录下,新建一个文件,命名为 setenv.sh
  2. 在文件中写入以下内容(请根据你的实际情况修改 IP):
#!/bin/sh
export CATALINA_OPTS="$CATALINA_OPTS \
-Djava.rmi.server.hostname=192.168.184.129 \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.rmi.port=9999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.local.only=false"

注意:最后一行参数后面不要加 \,否则会报错。

四、配置jvisualvm

  启动tomcat后,在windows本地jdk安装路径bin目录下找到jvisualvm.exe,双击打开后左侧显示如下:

图片[1]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

在“远程”上右键–>添加远程主机–>填写主机名:

图片[2]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

点击确定后,远程选项下多了一条刚才添加的主机列表。右键–>添加JMX连接,如下图,填入JMX远程连接端口号9999,并勾选“不要求ssl连接”:

图片[3]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

点击确定后,左侧多了一条pid为6822的远程连接,6822是远程tomcat的pid:

图片[4]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

双击该连接,在右侧可以动态查看jvm的概览信息,监控CPU,java堆,元空间,类,线程等数据:

图片[5]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

五、常见问题

  在添加JMX连接的时候,经常会出现如下报错:

图片[6]-Java虚拟机使用jvisualvm工具远程监控tomcat内存 JVM远程监控-龙之小站资源屋

此时可以从以下几个方向检查:

(1)检查tomcat应用是否启动,或者修改tomcat配置后是否重启tomcat,确保9999端口处于监听状态,查看命令netstat -nl|grep 9999;

(2)检查主机名是否和tomcat中配置的主机名相同,如果不同则按照第二步修改主机名;

(3)检查RMI端口号端口号是否在防火墙进行了配置,如果配置的RMI端口号和JMX端口号不一致,需要在防火墙配置RMI端口号允许访问,如果没有配置,则添加-Dcom.sun.management.jmxremote.rmi.port=9999配置RMI端口号。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容