Jenkins Agent 显示已连接但节点仍离线,如何排查?
结论
INFO: Connected 和 Jenkins 中的 Inbound agent connected 说明 Agent 曾成功建立连接,但不能证明 Remoting 通道之后一直正常,也不能说明节点现在可以执行任务。现有日志还不足以确定根因。需要按时间顺序对照 Agent、Jenkins Controller 和 Windows 服务器的状态,确认连接何时关闭,节点何时转为离线。
先确认节点的实际状态
在 Jenkins 中打开对应节点页面,查看节点状态、离线原因、是否被手动标记为离线,以及节点日志中连接建立后的记录。记下节点转为离线的时间,并确认是否有多个节点在相近时间离线。
逐个核对节点配置,包括节点名称是否与 Agent 配置对应、节点是否启用,以及启动方式或节点属性是否发生变更。如果节点页面显示了离线原因或日志提示,可据此继续排查。
对照连接关闭前后的日志
按时间顺序查看 Agent 的 CMD 输出、Jenkins 节点日志和 Controller 系统日志,重点留意连接成功后的连接关闭、异常、重连、超时、JVM 退出或 Controller 重启记录。
目前提供的日志片段包含 Send Unexport 和协议层通信记录,但上下文不足以判断它们是否导致节点离线。需要取得这些记录前后的完整日志。
启动命令中的 -workDir 指定了 Agent 的工作目录。检查 Agent 进程是否仍在运行、工作目录是否可访问,以及进程是否在节点离线时退出。问题发生时,也可以手动运行同一启动命令,观察 Agent 是否持续运行,以及 CMD 是否出现后续异常:
java -jar agent.jar -jnlpUrl <jenkins_url>/jenkins-agent.jnlp -secret <secret_key> -workDir "<work_directory>"
不要在公开日志或问题记录中暴露 <secret_key> 的实际值。
检查服务器负载与网络稳定性
近期并行运行的自动化任务可能增加 CPU、内存或进程压力,尤其是同时运行多个 Chrome 实例时。查看离线时间附近 Windows 服务器的 CPU 和内存使用情况、可用磁盘空间、Chrome 及 Java 进程数量,并检查系统是否记录了进程退出或资源不足。目前的材料只能把负载作为待验证的线索,不能据此认定它造成了故障。
也要检查 Agent 到 Jenkins Controller 的网络连接在离线时段是否中断或重置。如果多个 Agent 位于同一服务器或网络路径,并且同时离线,先比对它们共同依赖的服务器、网络和 Controller 事件。如果只有个别节点离线,再检查对应主机和节点配置。
建议的排查顺序
- 记录各节点显示的离线原因和离线时间。
- 对照 Agent、节点和 Controller 日志,找到连接成功后的第一条异常或断开记录。
- 确认 Agent 的 Java 进程是否仍在运行,工作目录是否可用。
- 检查离线时段的服务器资源、系统事件和网络状态。
- 比较多个节点的离线时间,判断是否存在共同的基础设施故障。
- 根据日志中的明确错误继续处理。如果没有错误信息,先收集完整时间窗口的日志,再缩小排查范围。
仅凭已提供的连接成功日志和 remoting 片段,无法判断原因是服务器负载、网络中断、进程退出还是节点配置问题。判断时应参考离线时间附近的完整日志和节点离线原因。
备注:内容仅供参考。
