GoLand远程调试频繁断开主因是SSH保活机制未启用或超时值过短,需在远程服务器sshd_config中配置ClientAliveInterval 60、ClientAliveCountMax 3、TCPKeepAlive yes并重启sshd,同时GoLand端禁用“Disconnect when debugging session ends”,并通过SSH隧道(带ServerAliveInterval)转发dlv端口。

GoLand远程调试连接频繁断开,根本不是网络差
断连主因是SSH保活机制未启用或超时值过短,而非带宽或延迟本身。GoLand底层依赖SSH通道传输调试协议数据,一旦SSH连接静默超时,dlv会话就直接中断,表现为“正在连接…”后闪退或断点突然失效。
必须改的sshd_config三项参数
仅在本地配GoLand没用,关键在远程服务器的SSH服务端配置。以下三行缺一不可,且需重启sshd:
-
ClientAliveInterval 60:每60秒主动发一次心跳包 -
ClientAliveCountMax 3:允许连续3次心跳无响应,即总容忍180秒断连 -
TCPKeepAlive yes:开启底层TCP保活,防中间NAT设备踢掉空闲连接
改完执行 sudo systemctl restart sshd,再用 sudo ss -tnp | grep :22 确认新配置已生效。别信“默认就支持”,多数云服务器镜像的sshd_config里这三项都是注释掉或设为0。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
GoLand侧要关掉“自动断开”陷阱
在Run Configuration → Remote Debug里,有一个默认勾选的选项:“Disconnect when debugging session ends”。它实际含义是“只要IDE窗口失去焦点、或调试器暂停超过几秒,就主动kill远程dlv进程”。这不是断连,是自毁。
- 务必取消勾选该选项
- 改选“Keep remote process running”——这样即使你切到浏览器查文档,dlv仍在后台跑着
- 配合上面的sshd保活,可稳定维持数小时无操作连接
别用公网直连dlv端口,走SSH隧道才是正解
很多人把 dlv --listen :2345 暴露在公网,再在GoLand填远程IP+2345,看似简单,实则埋雷:
- 防火墙策略、云厂商安全组、ISP限流都会导致间歇性丢包,触发dlv心跳失败
- dlv原生协议无重连机制,一次丢包=整个会话终结
- 正确做法是本地起SSH隧道:
ssh -L 2345:127.0.0.1:2345 user@remote-ip -o ServerAliveInterval=60 - GoLand中Host填
127.0.0.1,Port填2345,所有流量走加密隧道,底层由SSH负责重传和保活
隧道比直连多一层封装,但换来的是连接鲁棒性质变——哪怕Wi-Fi切换、短暂休眠,只要SSH没彻底断,dlv调试就能续上。真正容易被忽略的是:隧道命令里的 -o ServerAliveInterval=60 必须显式带上,否则本地SSH客户端自己也会超时退出。

















