Throttle Concurrent Builds 插件通过逻辑分组与执行器占用实现资源级限流,需先识别资源瓶颈类型(独占/有限并行/共享中间件),再配置全局类别、绑定任务并验证队列与日志。

在 Linux 环境中用 Jenkins 的 Throttle Concurrent Builds 插件控制特定资源的构建频率,核心是“按需分类 + 精准限流”。它不直接限制 CPU 或内存,而是通过逻辑分组和执行器占用控制,间接保护那些对并发敏感的外部资源(比如数据库连接池、许可证服务器、硬件设备、第三方 API 配额等)。
明确你要保护的资源类型
先确认目标资源的瓶颈特性:
- 是否只允许一个进程/实例独占访问(如单 license 工具、串口设备)→ 设 最大并发数 = 1
- 是否支持有限并行但易过载(如某 API 每分钟限 10 次调用)→ 按时间窗口折算为 节点级或全局并发上限
- 是否依赖共享中间件(如共用一个 PostgreSQL 实例)→ 建议按 项目类别+节点维度 双重限制,避免集中打到同一台 DB 代理机
配置全局资源类别(系统级设置)
进入 Jenkins 管理 → 系统配置 → Throttle Concurrent Builds,新增一个类别,例如:
category-db-access,设置:
- Maximum Total Concurrent Builds:根据总配额填(如 DB 连接池上限为 8 → 填 8)
- Maximum Concurrent Builds Per Node:建议设为 1 或 2,防止单节点突发请求压垮本地代理服务
- 勾选 Enable throttle for builds with the same parameters(如果相同参数任务重复访问同一资源,比如固定数据库名+表名)
这个类别就是你为“特定资源”定义的流量闸门。
在 Pipeline 或自由风格项目中绑定类别
不是所有项目都走同一道闸门。只有真正使用该资源的 Job 才需绑定:
-
Pipeline 写法:
pipeline {
agent any
options {
throttle(['category-db-access'])
}
stages { ... }
} - 自由风格项目:勾选 “Throttle builds”,在 “Throttle this project” 下选择 category-db-access,并确保 “Build concurrently if necessary” 已启用
注意:多个不同 Job 可以共用同一个类别,它们会统一参与计数 —— 这正是实现跨项目资源协调的关键。
验证与调优要点
部署后观察几个关键信号:
- 查看构建队列:新触发的同类构建若显示 “Waiting for throttle”,说明限流生效
- 检查构建日志开头是否有类似 “Throttling build: waiting for category 'category-db-access' (currently 2/8 in use)”
- 监控目标资源的实际负载(如
pg_stat_activity行数、API 返回 429 频次),反向校准并发值 - 避免死锁:若 A 项目 throttle 后触发 B 项目,而 B 也 throttle 同一类别,可能形成等待环 → 此时应拆分为独立类别(如
category-db-write和category-db-read)
不复杂但容易忽略


















