VSCode 启动 Spring Boot 微服务 JMX 端口冲突问题

VSCode 启动 Spring Boot 微服务 JMX 端口冲突问题(最终解决)

一、问题现象

使用 Visual Studio Code 启动多个微服务时,报错:

text 复制代码
java.rmi.server.ExportException: Port already in use
Caused by: java.net.BindException: Address already in use

即使使用 netstat 也查不到端口占用。


二、根本原因

问题并不在 Spring Boot,而在 JMX(Java 管理接口)

  • JMX 基于 RMI(远程调用)

  • 实际使用 两个端口

    1. jmxremote.port(注册端口)
    2. jmxremote.rmi.port(通信端口)

👉 如果只配置了一个端口:

bash 复制代码
-Dcom.sun.management.jmxremote.port=52053

那么:

  • 第二个端口会 随机分配
  • 多服务启动时仍然可能冲突

三、正确解决方案(在 launch.json 中配置)

👉 必须在 launch.jsonvmArgs 中同时固定两个端口

标准写法:

json 复制代码
"vmArgs": "-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=61010 \
-Dcom.sun.management.jmxremote.rmi.port=61010 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=127.0.0.1"

四、多个微服务配置示例

每个服务使用不同端口,例如:

json 复制代码
{
  "configurations": [
    {
      "name": "gateway",
      "vmArgs": "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=61010 -Dcom.sun.management.jmxremote.rmi.port=61010 ..."
    },
    {
      "name": "auth",
      "vmArgs": "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=61011 -Dcom.sun.management.jmxremote.rmi.port=61011 ..."
    },
    {
      "name": "flowable",
      "vmArgs": "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=61012 -Dcom.sun.management.jmxremote.rmi.port=61012 ..."
    }
  ]
}

五、仍然报错的原因

即使配置正确,仍可能出现:

  • JVM 端口未及时释放(TIME_WAIT)
  • JMX 残留导致"假占用"

六、最终解决办法

✅ 1. 更换一组新端口(最有效)

text 复制代码
61010 / 61011 / 61012

避免使用已经报错的端口(如 52053)。


✅ 2. 清理 Java 进程

bash 复制代码
taskkill /F /IM java.exe

✅ 3. 重启系统(兜底)

彻底释放端口资源。


七、总结

JMX 冲突 = 双端口机制 + 端口未释放

最终解决方案:

✅ 在 launch.json 中配置 port + rmi.port

✅ 每个服务使用不同端口

✅ 避免使用已冲突端口

即可彻底解决问题。


相关推荐
杨运交6 小时前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
Flittly1 天前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt2 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫3 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
人活一口气4 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
蝎子莱莱爱打怪6 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
java小白小7 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot
用户3169353811837 天前
如何从零编写一个 Spring Boot Starter
spring boot
SamDeepThinking7 天前
Java微服务练习方式
java·后端·微服务
程序员晓琪8 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端