Azure DevOps自托管代理闲置后断开:ConnectionReset错误求助
问题描述
在GCP虚拟机(CentOS Stream 9)上部署Azure DevOps自托管代理,已成功接入并能正常运行流水线,但代理闲置15-25分钟后会显示离线,需手动执行./run.sh &才能重新上线。Azure代理日志报错Socket Error: ConnectionReset。
- 注册代理命令:
<<PATH>>/config.sh --replace --work work --acceptTeeEula --url https://<domain>/<org>/ --auth pat --token <<PAT-TOKEN>> --agent <my-agent> --pool <my-agent-pool> && <<PATH>>/run.sh - 后续重启代理使用
<<PATH>>/run.sh & - 尝试Docker容器部署代理,同样出现闲置后离线的问题
- 系统信息:
NAME="CentOS Stream" VERSION="9" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="9" PLATFORM_ID="platform:el9" PRETTY_NAME="CentOS Stream 9" ANSI_COLOR="0;31" LOGO="fedora-logo-icon" CPE_NAME="cpe:/o:centos:centos:9" HOME_URL="https://centos.org/" BUG_REPORT_URL="https://issues.redhat.com/" REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9" REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
排查与解决方案
1. 调整代理的心跳与连接超时配置
Azure DevOps自托管代理默认的心跳间隔可能不足以应对GCP网络的闲置超时。修改代理安装目录下.agent文件夹中的agent.config配置文件:
- 将
heartbeatInterval从默认30秒调整为10-15秒 - 将
connectionTimeout从默认10分钟调整为20分钟 - 将
retryInterval调整为5秒
修改后重启代理,观察离线情况是否改善。
2. 配置GCP VM的网络闲置超时
GCP默认的网络防火墙或实例网络配置可能会断开长时间闲置的连接,需做以下调整:
- 登录GCP控制台,找到目标VM实例,进入网络接口配置页面
- 开启TCP keep-alive功能,设置间隔为120秒以内
- 检查VM所在子网的防火墙规则,确保允许代理与Azure DevOps服务器的持续连接,避免闲置连接被阻断
3. 系统层面配置TCP Keep-Alive
在CentOS系统中调整TCP keep-alive参数,防止闲置连接被系统或网络设备断开:
编辑/etc/sysctl.conf,添加或修改以下参数:
net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 5
执行sysctl -p使配置生效,该配置会让系统每10分钟发送一次keep-alive包,间隔60秒重试5次,避免连接被重置。
4. 将代理注册为systemd系统服务
手动运行代理容易因会话退出或系统重启导致中断,将代理配置为systemd服务,实现自动启动与重启:
- 创建服务文件
/etc/systemd/system/azure-devops-agent.service:[Unit] Description=Azure DevOps Self-Hosted Agent After=network.target [Service] User=<your-user> WorkingDirectory=<agent-install-path> ExecStart=<agent-install-path>/run.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target - 替换
<your-user>和<agent-install-path>为实际用户与代理安装路径 - 执行以下命令启用并启动服务:
systemctl daemon-reload systemctl enable azure-devops-agent.service systemctl start azure-devops-agent.service
5. 检查Azure DevOps端连接限制
确认Azure DevOps组织的代理池设置中没有配置代理闲置超时规则,同时检查是否存在IP地址变更导致连接被服务器端阻断的情况。
内容的提问来源于stack exchange,提问作者Jagdish0886
相关产品推荐
相关产品推荐

