You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ IDEA连接远程JVM调试端口报错求助

解决IntelliJ IDEA远程JVM调试握手失败问题

针对你遇到的handshake failed - connection prematurally closed错误,按以下步骤排查解决:

1. 确认JVM调试参数是否实际生效

你在Dockerfile中配置了JAVA_TOOL_OPTIONS,但docker-compose里又指定了JVM_ARGS和CATALINA_OPTS_EXTRA,可能存在参数未被应用的情况:

  • 进入运行中的容器:
    docker exec -it <容器名称/ID> bash
    
  • 查看Java进程的启动命令:
    ps aux | grep java
    
  • 确认输出中包含完整的调试参数(例如-agentlib:jdwp=transport=dt_socket,address=*:4004,server=y,suspend=n)。如果没有:
    • 若应用是Tomcat,建议将Dockerfile中的环境变量改为CATALINA_OPTS(Tomcat默认优先读取该变量):
      ENV CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=*:4004,server=y,suspend=n"
      
    • 若为自定义启动脚本,确保脚本将JAVA_TOOL_OPTIONS或JVM_ARGS注入到Java启动命令中。

2. 验证端口连通性

检查容器内部监听状态

在服务器上执行,确认容器内4004端口处于监听状态:

docker exec <容器ID> ss -tulpn | grep 4004

预期输出应包含LISTEN 0 0 0.0.0.0:4004。

检查服务器端口映射

执行docker ps,查看容器的端口映射列,确认显示为0.0.0.0:4004->4004/tcp。

验证本地隧道连通性

在本地执行以下命令,测试是否能连接到隧道端口:

nc -zv localhost 4004

(Windows用户可使用telnet localhost 4004)
若连接失败:

  • 检查远程服务器防火墙是否开放4004端口(临时关闭防火墙测试,例如ufw allow 4004)
  • 重新建立SSH隧道,确保命令正确:
    ssh -f 10.12.91.11 -L 4004:127.0.0.1:4004 -N
    

3. 调整Java 17的调试参数

Java 17无需保留旧版的-Xdebug参数,该参数可能引发兼容性问题。建议使用最简有效配置:

ENV JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=*:4004,server=y,suspend=n"

4. 检查IntelliJ IDEA配置

确保远程调试配置与环境匹配:

  • 打开Run/Debug Configurations,选择你的远程调试项
  • Host设为localhost,Port设为4004
  • Debugger mode选择Attach to remote JVM
  • Use module classpath选择与远程代码一致的主模块
  • 确认JDK版本选择17,与远程Docker镜像环境一致

完成以上步骤后,重启Docker容器和SSH隧道,再尝试连接调试。

内容的提问来源于stack exchange,提问作者Santosh Jagtap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:20:18