使用VisualVM访问本地Actuator JMX端点
解决JVisualVM连接Spring Boot Actuator JMX端点的问题
我来帮你排查并解决这个连接问题,先梳理下你当前配置里的潜在疏漏,再给出完整的修正步骤:
你当前配置的问题点
- JVM参数格式错误:你在
bootRun里把两个JMX参数写在了同一个字符串中,JVM会把整个字符串当成单个参数解析,导致参数完全不生效。 - 未指定固定RMI端口:默认情况下RMI会随机分配服务端口,这会让JVisualVM无法稳定定位到JMX服务。
- 连接地址可能存在格式问题:错误的JMX URL会导致连接失败,需要严格遵循标准格式。
修正后的完整配置步骤
1. 修复build.gradle的JVM参数配置
把JVM参数拆分成独立的数组元素,同时指定固定的RMI端口并关闭开发环境下的认证/SSL(生产环境请根据需求开启):
bootRun { jvmArgs = [ "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.local.only=false", "-Dcom.sun.management.jmxremote.port=9001", "-Dcom.sun.management.jmxremote.rmi.port=9001", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Djava.rmi.server.hostname=localhost" ] }
参数说明:
jmxremote.port=9001:指定JMX RMI注册表的固定端口jmxremote.rmi.port=9001:让RMI服务端口和注册表端口保持一致,避免随机端口带来的连接问题java.rmi.server.hostname=localhost:明确RMI服务的主机名,避免本地地址解析异常
2. 完善Spring Boot的JMX端点配置
在application.properties(或application.yml)中添加以下配置,确保Actuator端点暴露到JMX:
spring.jmx.enabled=true # 暴露所有Actuator端点到JMX,也可以指定具体端点比如health,metrics management.endpoints.jmx.exposure.include=*
3. 用JVisualVM正确连接
启动应用后,按以下步骤操作:
- 打开JVisualVM,右键点击左侧面板的「本地」→「添加JMX连接」
- 在「连接地址」输入框中填入:
service:jmx:rmi:///jndi/rmi://localhost:9001/jmxrmi - 取消勾选「需要SSL连接」(如果你没开启SSL的话)
- 点击「确定」,连接成功后,展开左侧的MBean节点,就能在
org.springframework.boot下找到所有暴露的Actuator端点。
额外排查小贴士
- 确认9001端口未被其他进程占用:Linux/macOS可以用
netstat -an | grep 9001,Windows用netstat -ano | findstr 9001检查。 - 如果是远程连接,需要把
java.rmi.server.hostname改成远程服务器的IP/域名,同时确保防火墙开放9001端口。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

