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

Jenkins节点显示离线但服务器端Agent已连接的故障排查求助

Jenkins节点显示离线但Agent已连接的故障排查分析

问题背景

我有一个Jenkins仪表板,关联了多个Freestyle项目与节点。此前通过Windows服务器上的管理员权限CMD脚本自动启动对应Agent,所有节点均可自动上线,该模式正常运行超一年。但近期所有节点突然显示离线,尽管服务器端Agent已连接。即使重启Jenkins服务、终止自动启动Agent的脚本并手动启动Agent,Jenkins节点仍显示离线。基础设施与服务器团队处理过服务器卡顿问题,但表示不清楚原因,认为是Jenkins应用的变更导致,而我们并未进行任何变更。近期唯一的变化是启用了自动化并行模式,该模式会启动大量Chrome实例,可能对服务器造成了一定影响,但不确定是否与此故障相关。

相关信息

Agent启动脚本

java -jar agent.jar -jnlpUrl <jenkins_url>/jenkins-agent.jnlp -secret <secret_key> -workDir "<work_directory>"

CMD输出关键信息

INFO: Agent discovery successful
  Agent address: <address>
  Agent port:    <redacted>
INFO: Connected

Jenkins节点日志输出

Inbound agent connected from <redacted>
Remoting version: 3107.v665000b_51092
Launcher: JNLPLauncher
Communication Protocol: JNLP4-connect

附加远程日志记录

Send Unexport
    FINEST hudson.slaves.SlaveComputer
    JNLP4-connect connection from <server ip info>:54036 wrote 1443:              Unexport
    FINEST org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer
    [JNLP4-connect connection from <server ip info>:54036] APP      ENCODE: 1,445 bytes
FINEST org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer
[JNLP4-connect connection from <server ip info>:54036] Handshake status: NOT_HANDSHAKING engine result: Status = OK HandshakeStatus = NOT_HANDSHAKING
bytesConsumed = 1445 bytesProduced = 1483 sequenceNumber = 19
FINEST org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer
[JNLP4-connect connection from <server ip info>:54036] APP SEND: 1,483 bytes
FINEST org.jenkinsci.remoting.protocol.impl.NIONetworkLayer
[JNLP4-connect connection from <server ip info>:54036] SEND: 1,483 bytes
FINEST org.jenkinsci.remoting.protocol.IOHub
Scheduling adding OP_WRITE to channel=java.nio.channels.SocketChannel[connected local=/<ip>:49854 remote=<server ip info>:54036], selector=sun.nio.ch.WEPollSelectorImpl@4bbcc33e, interestOps=1, readyOps=4
FINE hudson.remoting.Channel
Send Unexport

可能的故障原因及排查方向

1. 服务器资源耗尽(与并行Chrome实例直接相关)

近期启用的并行模式会启动大量Chrome实例,结合基础设施团队处理过服务器卡顿的情况,这是最可能的诱因:

  • 当Windows服务器的CPU、内存或磁盘IO被耗尽时,Agent进程虽能建立基础连接,但无法及时响应Jenkins主节点的心跳或状态检查请求,导致主节点判定节点离线。
  • 从日志看,Agent与主节点的TCP连接已建立,但后续的Send Unexport操作可能因资源不足无法完成完整交互,最终引发节点状态异常。

排查建议:

  • 打开Windows任务管理器,查看Agent进程的CPU、内存占用,以及所有Chrome实例的资源消耗总和。
  • 临时关闭并行模式,减少Chrome实例数量,手动重启Agent后观察节点是否能正常在线。

2. Jenkins Remoting协议会话异常

日志中出现的Send Unexport通常表示主节点尝试终止Agent会话,结合场景可能存在以下问题:

  • 版本不兼容:即使未主动变更Jenkins,主节点的Remoting插件可能被自动更新,而服务器上的agent.jar仍是旧版本,导致连接后立刻被断开。
  • 密钥或权限问题:服务器卡顿可能导致密钥缓存失效,或者节点配置中的Secret密钥与启动脚本中的<secret_key>出现隐性不一致(比如脚本被意外修改)。

排查建议:

  • 从Jenkins主节点重新下载最新的agent.jar替换服务器上的版本,再重启Agent。
  • 核对节点配置中的Secret密钥,确保和启动脚本中的内容完全一致。

3. Windows服务器网络或TCP栈异常

虽然连接能建立,但可能存在隐性网络问题:

  • 基础设施团队处理服务器卡顿的过程中,可能调整了防火墙规则或网络策略,导致Agent与主节点的心跳包被丢弃。
  • Windows的TCP/IP栈出现异常(比如TIME_WAIT连接过多),导致新会话无法维持稳定通信。

排查建议:

  • 检查Windows服务器的防火墙日志,确认是否有Jenkins主节点IP的拦截记录。
  • 执行netstat -ano命令查看TCP连接状态,是否存在大量异常连接。
  • 执行netsh int ip reset重置TCP/IP服务,再重启Agent尝试连接。

4. Jenkins主节点状态缓存或磁盘问题

Jenkins主节点可能存在状态更新异常:

  • 重启Jenkins服务后,节点状态缓存未完全清理,导致显示的离线状态未更新。
  • 主节点磁盘空间不足,无法写入节点状态数据,导致状态更新失败。

排查建议:

  • 检查Jenkins主节点的磁盘可用空间,确保有足够余量。
  • 在Jenkins界面中对离线节点执行Mark this node as online操作,观察状态是否能更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:23:12