JMX 远程连接

JMX 远程连接

1. 检查 Java 进程是否正确监听 JMX 端口

运行以下命令,确认 Java 进程是否在监听你配置的 ${process_port}

sudo netstat -tulnp | grep java

预期输出(假设 ${process_port}=9010):

tcp6  0  0  :::9010  :::*  LISTEN  12345/java
  • 如果没有输出,说明 JMX 端口未正确绑定,检查启动参数是否生效。
  • 如果端口是 127.0.0.1:9010 而不是 :::9010,说明 JMX 仅绑定到本地,需修改为 0.0.0.0

2. 确保 JMX 远程配置完整

JMX 远程访问需要 完整的 JVM 参数,仅配置端口是不够的。以下是 必须的 JMX 远程参数

-Dcom.sun.management.jmxremote.port=${process_port} # JMX主端口
-Dcom.sun.management.jmxremote.rmi.port=${process_rmi_port}  # 固定RMI随机端口,如果有防火墙控制的话,随机到防火墙控制的端口就连接不上了
-Dcom.sun.management.jmxremote.authenticate=false  # 禁用认证(测试用)
-Dcom.sun.management.jmxremote.ssl=false           # 禁用 SSL(测试用)
-Dcom.sun.management.jmxremote.local.only=false    # 允许远程连接
-Djava.rmi.server.hostname=<服务器公网IP或内网IP>  # 关键!避免 RMI 回环问题

关键点

  • java.rmi.server.hostname 必须设置为 服务器真实 IP(不能是 127.0.0.1localhost),否则 JMC 无法连接。
  • MX 实际使用 两个端口
    • JMX 主端口(上面的process_port):用于 JConsole 初始连接。
    • RMI 随机端口(上面的process_rmi_port):用于数据传输(默认动态分配,可能导致连接失败)。
  • 生产环境建议启用认证和 SSL(此处禁用仅用于测试)。

3. 检查防火墙是否放行端口

即使 JMX 配置正确,防火墙可能阻止连接。检查并开放端口:

(1)检查 iptables/firewalld

# 查看 iptables 规则
sudo iptables -nL | grep ${process_port}

# 临时开放端口(如 9010)
sudo iptables -I INPUT -p tcp --dport 9010 -j ACCEPT

# 如果使用 firewalld
sudo firewall-cmd --add-port=9010/tcp --permanent
sudo firewall-cmd --reload

(2)云服务器安全组

如果是 云服务器(AWS/Aliyun/Tencent Cloud),需在 安全组规则 中放行 ${process_port}(如 9010)。


4. 使用 JConsole 或 JVisualVM 连接

JConsole

image-20250708202535739

JVisualVm

image-20250708204708244


5. 常见错误及解决方案

错误现象 可能原因 解决方案
Connection refused 端口未监听 / 防火墙阻止 检查 netstatiptables
Authentication failed JMX 认证未正确配置 禁用认证或配置 jmxremote.password
SSL handshake failed SSL 配置冲突 设置 jmxremote.ssl=false
连接后无数据 java.rmi.server.hostname 错误 确保 IP 是服务器真实 IP
仅本地能连,远程不能 绑定到 127.0.0.1 设置 jmxremote.local.only=false
Timeout连接失败 RMI随机端口随机到防火墙频闭的端口了 设置jmxremote.rmi.port,固定RMI端口

总结

  1. 检查端口监听netstat -tulnp | grep java
  2. 完整 JMX 参数 → 特别是 java.rmi.server.hostnamejmxremote.rmi.port(防止随机到防火墙未放行的端口)
  3. 防火墙/安全组 → 防火墙放行 JMX 端口 + RMI 端口
  4. JConsole/JVisualVM → 使用正确 IP 和端口连接
posted @ 2025-08-05 20:39  deyang  阅读(174)  评论(0)    收藏  举报