当前位置: 首页 > news >正文

JDK 17 远程调试连不上 5005:从 attach timeout 到 JDWP 监听地址变更

背景

团队在 Mac 上用 VS Code 远程调试部署在 myhost 上的 Tomcat(clouddatahub)。launch.json 使用 Java attach 模式:

{"type": "java","request": "attach","hostName": "myhost","port": 5005
}

JDK 8 时代一直正常;迁移到 JDK 17 后出现:

java.io.IOException: Failed to attach to myhost:5005
(attach timeout 30000, handshake timeout 0)

根因:JDK 9+ 改了 JDWP 的默认绑定地址

远程 JVM 常通过 CATALINA_OPTS / JAVA_OPTS 开启调试,例如:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

JDK 8 vs JDK 9+

配置 JDK 8(及更早) JDK 9+(含 11、17)
address=5005 多在 5005 端口监听,常可从其他机器 attach 默认只绑定 127.0.0.1,仅本机可连
远程 IDE attach 同一 hostname:5005 通常可以 会超时(除非做 SSH 隧道或改配置)
要对局域网/远程开放 历史上“只写端口”往往就够 必须显式写,例如 address=*:5005

升级 JDK 后若未改 JDWP 参数,会出现:

  • 服务器本机 nc localhost 5005 → 可能通
  • 开发机 nc myhost 5005 → 超时

这与 VS Code、launch.json 无关,是 JVM 监听范围变了。

为何 JDK 要改?

  • 远程调试等于给 JVM 开高权限调试入口;仅写端口容易在不知情下对全网开放 5005。
  • JDK 9 起:只写端口 = 仅本机调试;要远程调试需 opt-in* 等)。
  • 属于 intentional 安全策略,不是 Tomcat 或 IDE 的 bug。

如何快速确认

1. 开发机(Mac)

nc -zv myhost 5005
  • 超时 → 防火墙、未映射端口,或 JVM 只监听 127.0.0.1
  • Connection refused → 未开 JDWP、端口错误或 Tomcat 未起

2. 远程服务器

ss -tlnp | grep 5005
ps aux | grep jdwp

关注监听地址:

127.0.0.1:5005    # 仅本机 → 跨机 attach 会失败(JDK 9+ 下 address=5005 常见)
0.0.0.0:5005      # 或 *:5005 → 可从其他机器连(需防火墙放行)

3. 对照表

本机 nc 远程 ss 结论
超时 无 5005 未开 JDWP 或 Tomcat 未启动
超时 127.0.0.1:5005 典型:JDK 9+ 只监听本机
超时 0.0.0.0:5005 查防火墙 / 安全组
成功 java 在听 attach 应可成功

解决方案

方案 A:SSH 端口转发(推荐,安全)

不改远程 JVM,继续 address=5005(只监听本机):

ssh -L 5005:127.0.0.1:5005 user@myhost

launch.json 改为:

"hostName": "localhost",
"port": 5005

流量经 SSH 加密,5005 不暴露到公网,适合 draft/内网环境。

方案 B:改远程 JDWP,允许对外监听

在 Tomcat 启动参数中(JDK 9+)使用:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

launch.json 可继续 hostName: myhost

注意:

  • 必须在防火墙 / 安全组中按需放行 5005,且限制来源 IP。
  • 生产环境慎用;draft 也建议仅内网 + IP 白名单。
  • 改完后需重启 Tomcat,并再次 ss -tlnp | grep 5005 验证。

与 VS Code / launch.json 的关系

attach 配置里的 projectNamesourcePaths 只影响断点命中后的源码映射,不会导致 attach timeout

排查顺序建议:

  1. 本机能否连上 5005(nc
  2. 远程 JDWP 绑定地址(ss + 启动参数)
  3. 是否需要 SSH 隧道或 address=*:5005
  4. 再查源码版本是否与远程 WAR 一致

团队 checklist(JDK 17 远程调试)


一句话总结

JDK 8 上 address=5005 往往能被远程 attach;JDK 9+ 同写法默认只监听本机。升级到 JDK 17 后远程调试超时,多半是监听地址策略变了,而不是 IDE 配错。用 SSH 隧道或 address=*:5005 即可恢复,并注意生产环境安全。

http://www.jsqmd.com/news/852715/

相关文章:

  • 别再搞混了!设备上那个RJ45口是Console调试口,不是网口(附电路设计详解)
  • 告别环境冲突!用Miniconda3在Windows上为不同Python项目创建独立开发环境(保姆级图文)
  • 【诊断进阶】从Event到DTC:DEM故障管理核心机制全解析
  • Midjourney年费优惠背后的算法逻辑:为什么11月第3周是最佳下单日?(基于127次API调用与客服响应时延分析)
  • TI WEBENCH滤波器设计工具:从理论到电路的一站式自动化实现
  • 告别手动配置JRE!用JDK 18内置工具一键生成,并关联到IDEA项目
  • 消防工程企业如何做新媒体AI智能获客?2026全网推广指南与服务商盘点 - 优质企业观察收录
  • 别再只用scatter了!用Matlab绘制带密度信息的散点图,让你的数据可视化更专业
  • 从VGG到ResNet:为什么你的100层网络效果还不如20层?聊聊梯度消失与‘捷径’的艺术
  • 2026 机器人即服务(RaaS)主流供应商全景评测 —— 万机易租领跑全场景轻量化升级 - 奔跑123
  • 告别命令行恐惧:用DataGrip在Ubuntu 22.04的MySQL里建库、授权、查数据,一篇搞定
  • 怎么远程操作另一台手机 手机能远程控制别的手机吗
  • 健身房私教管理系统 (二):多角色路由分发与实体扩展表设计
  • 长文本处理技术综述:突破上下文限制
  • BBH基准测试结果反常?DeepSeek-R1推理延迟飙升47%的真实原因,工程师已连夜回滚
  • 2026年Word生成完全指南:4种方法从零到自动化,效率提升10倍
  • VAP技术深度解析:从硬件解码到跨平台特效动画的完整实现方案
  • 2026年的专业床垫,从平价到高端究竟该怎么选?
  • 新手避坑指南:用STM32CubeMX和Keil5给NUCLEO-F411RE点亮0.96寸OLED(附完整工程源码)
  • EG2133全桥驱动自举电路翻车实录:从电容烧毁到稳定运行的完整调试过程
  • UVM约束进阶玩法:用randc、solve...before和动态约束打造更‘聪明’的测试序列
  • HermesAgent工具连接Taotoken的配置要点与排错指南
  • 石家庄合同纠纷律师实操解析与胜诉案例参考 - 奔跑123
  • 信噪比计算实战指南:从原理到代码实现
  • 终极指南:如何用3分钟将任何网页转换为可编辑的Figma设计稿?
  • 终极滚动控制指南:如何为Mac触控板和鼠标设置独立滚动方向
  • QGIS点云处理避坑指南:从LAS文件到精准地图投影,我用LAStools插件踩过的那些雷
  • 地暖行业如何做线上推广获客?2026全网获客指南与服务商盘点 - 优质企业观察收录
  • 石家庄离婚纠纷实操参考:如何匹配靠谱代理律师 - 奔跑123
  • 3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验