Ubuntu 21.04下Java 16应用远程调试提示Connection refused如何解决
Java 16 远程调试Connection refused排查方案
核心根因(优先级最高)
Java 9 及以上版本(你使用的Java 16属于该范围)的JDWP调试接口默认仅绑定本地环回地址127.0.0.1,仅允许服务器本地访问调试端口,外网请求会直接被拒绝。
你只需要修改JVM启动参数中的address配置,指定绑定所有网卡地址即可:
-Xdebug \ -Xrunjdwp:transport=dt_socket,address=0.0.0.0:8999,server=y,suspend=y \
也可以使用Java 9+更推荐的agentlib格式参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0.0.0.0:8999
其他常规排查项
如果修改参数后问题仍存在,按以下顺序排查:
- 检查Ubuntu本地防火墙规则
执行命令查看防火墙状态:sudo ufw status
如果防火墙处于开启状态,添加8999端口的入站放行规则:sudo ufw allow 8999/tcp - 验证端口实际绑定状态
启动Java应用后,在服务器执行命令:ss -tulpn | grep 8999
正常输出中监听地址应为0.0.0.0:8999,如果还是127.0.0.1:8999说明JVM参数未生效,检查启动脚本是否有参数覆盖 - 检查云服务商安全组规则
如果你的Ubuntu服务器部署在公有云平台,需要在对应云服务商控制台的安全组配置中,放行8999端口的入方向TCP请求 - 验证网络连通性
在你本地调试的机器上执行连通性测试命令:telnet 服务器公网IP 8999或nc -zv 服务器公网IP 8999
如果返回连接失败,说明是网络层链路问题,排查服务器路由、公网IP是否正确等配置;如果连接成功,排查本地IDE的远程调试配置是否填写了正确的IP和端口。
内容的提问来源于stack exchange,提问作者Stephen Reed
相关产品推荐
相关产品推荐

