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

Jenkins Agent使用Java 17+WebSocket仍触发ClosedChannelException断开连接问题排查求助

Jenkins Agent使用Java 17+WebSocket仍触发ClosedChannelException断开连接问题排查求助

我之前处理过几起类似的Jenkins代理WebSocket连接异常断开的问题,结合你的环境和报错日志,给你梳理几个可落地的排查方向,你可以逐一验证下:

一、先排除基础环境的非代码/插件因素

  1. Windows服务的权限与资源限制
    你的代理是作为Windows服务运行的,得先检查下服务的运行账号权限——是不是用了受限的本地账户?比如流水线执行Matlab任务时需要加载大资源,权限不够或者内存/CPU被耗尽,都可能间接导致WebSocket连接被强制中断。另外去Windows事件查看器的系统日志里翻一翻,有没有代理进程被系统杀进程的记录,也可以用资源监视器盯着代理进程的内存波动,看看是不是有突发的资源耗尽情况。
  2. WebSocket连接的网络稳定性
    哪怕用了WebSocket,网络层面的小波动也可能让ChannelPinger误判节点死亡。你可以在代理节点上抓包看看WebSocket的ping/pong帧有没有丢包,或者检查控制器和代理之间的防火墙/企业杀毒软件——有些安全软件会把长时间保持的WebSocket连接当成可疑流量直接切断。另外还能调大Jenkins的心跳超时:在控制器的Manage Jenkins > Configure System里找到「Agent Ping Settings」,把超时从默认30秒改到60秒,避免短暂延迟被误判。

二、插件兼容性排查

针对你提到的Matlab和OpenTelemetry插件,确实有过相关的兼容性反馈:

  1. Matlab Plugin
    老版本的Matlab插件在Java 17环境下,可能因为JNI调用或者进程隔离的问题,占用过多代理进程资源,甚至导致代理JVM出现异常,间接触发WebSocket通道关闭。你可以先临时禁用Matlab插件,跑一个不含Matlab任务的简单流水线(比如只执行echo hello),如果问题消失,那大概率是插件的锅,建议升级到最新版本,或者在Matlab任务里加个显式关闭进程的步骤。
  2. OpenTelemetry Plugin
    这个插件如果配置不当(比如采样率过高、遥测数据量太大),会占用过多网络带宽或JVM内存,导致WebSocket心跳包延迟发送,被ChannelPinger判定为节点死亡。你可以先临时禁用插件,或者调低遥测数据的输出量,再观察连接情况。

三、Jenkins内置Jetty WebSocket的已知问题

你用的Jenkins 2.462.1依赖的Jetty版本是10.0.20左右,这个版本在Java 17环境下处理WebSocket长连接时,确实有过线程池耗尽导致通道关闭的问题。你可以试试给控制器加个启动参数--jetty-threads=500(默认是200),扩大Jetty的线程池。另外,2.462.x系列在Java 17+WebSocket的组合下,有过代理重连时通道残留的问题,你可以重启控制器清理旧连接缓存,再重新启动代理节点试试。

四、JVM层面的细节排查

虽然Java版本对齐了,但JVM启动参数可能有差异:

  • 检查代理节点的JVM启动参数,是不是加了-Xmx限制了内存大小,导致Matlab任务执行时触发OOM,进而引发通道关闭。
  • 要是开启了代理的JVM日志,看看里面有没有OutOfMemoryError或者其他未捕获的异常,这些异常可能会导致JVM的网络线程崩溃,直接触发ClosedChannelException。

你可以按照这个顺序从易到难排查,先从简单的环境调整入手,再到插件和JVM参数的验证,应该能定位到问题所在。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:48:04