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

如何调试Jenkins的ExecutorServiceUtils$FatalRejectedExecutionException异常

调试Jenkins中每秒大量出现的ExecutorService关闭异常

从你提供的堆栈信息来看,异常核心是ExecutorServiceUtils$FatalRejectedExecutionException,提示执行器服务正在关闭时无法提交任务,调用链最终指向WaitForConditionStep$Execution.retry——说明是某个等待条件的步骤在重试时,对应的CPS VM线程池已被关闭,但重试逻辑仍在尝试提交任务。以下是具体调试步骤:


1. 定位关联的流水线任务

  • 先排查Jenkins中正在运行、最近失败或异常终止的流水线,重点找使用了waitForCondition或自定义等待逻辑(比如轮询资源、等待外部事件)的任务。
  • 打开Jenkins脚本控制台(Manage Jenkins > Script Console),执行以下脚本列出所有活跃的流水线执行实例,关联到具体任务:
    import org.jenkinsci.plugins.workflow.flow.FlowExecutionList
    FlowExecutionList.all().each { exec ->
        println "任务名称: ${exec.owner.name}, 执行ID: ${exec.id}, 是否活跃: ${exec.isActive()}"
    }
    
  • 重点关注isActive()返回false但仍有回调执行的任务,这类任务最可能出现执行器关闭后仍提交任务的情况。

2. 检查核心插件版本

  • 堆栈涉及的核心插件:workflow-cps、workflow-support、workflow-step-api,确认这些插件是否为最新稳定版——旧版本可能存在重试逻辑未正确处理执行器关闭的bug。
  • 同时检查自定义插件或共享库中是否有手动使用WaitForConditionStep、或直接向CPS线程池提交任务的代码,这类自定义逻辑可能未处理执行器关闭的异常场景。

3. 启用精细化日志

  • 进入Jenkins日志配置页面(Manage Jenkins > System Log > Log Levels),将以下包的日志级别调整为FINER或FINEST:
    • org.jenkinsci.plugins.workflow.cps
    • org.jenkinsci.plugins.workflow.steps
    • hudson.remoting.SingleLaneExecutorService
  • 精细化日志会捕获任务提交时的上下文信息,比如具体是哪个流水线步骤触发了重试,以及执行器关闭的触发原因。

4. 分析线程转储

  • 当异常大量出现时,生成Jenkins线程转储(Manage Jenkins > System Information > Thread Dump),重点查找:
    • 处于WAITING或TIMED_WAITING状态的CpsThread
    • 正在执行WaitForConditionStep相关逻辑的线程
    • 标记为SHUTTING_DOWN或TERMINATED的ExecutorService实例,关联对应的任务ID
  • 线程转储能帮你定位到哪些线程还在持有已关闭执行器的引用,进而锁定异常来源。

5. 临时缓解与验证

  • 先尝试终止所有疑似有问题的流水线任务,观察异常是否停止,以此确认问题是否来自特定任务。
  • 如果是插件bug,临时降级或升级到已知稳定版本验证;如果是自定义代码问题,在重试逻辑中添加执行器状态检查:
    // 示例:提交任务前检查执行器是否未关闭
    if (!executorService.isShutdown()) {
        executorService.submit(task)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:16:14