跳到主要内容

主从架构与性能调优

构建多了,Jenkins 的瓶颈从"功能"变成"性能":构建排队、Master 卡顿、磁盘爆满、GC 频繁。本篇按"Master → Agent → 构建 → 存储"顺序给出优化方向。

本篇目标:能合理规划执行器与 Agent,诊断排队和磁盘问题,配置资源隔离与监控指标。


1. 先分清瓶颈在哪​

构建慢 / 排队
├── 无可用 Executor? → Agent 不足 / 并发受限
├── Master 响应慢? → Master 资源被挤占、JVM 内存不足
├── 磁盘快满? → Workspace / 构建记录 / 日志堆积
└── 单个构建本身就慢? → 构建脚本 / 依赖下载

用 Manage Jenkins → System Info 和 Load Statistics 观察负载,配合监控(见第 5 节)定位。

2. Agent 规划​

2.1 执行器数量​

节点建议执行器数
内置节点(Master)0(或极少数轻量管理 Job)
专用构建机(8C16G)2-4
K8s 动态 Agent按 Pod 模板配额,不必在 Cloud 上堆执行器

执行器不是越多越好——过多会让每台 Agent 的构建互相抢资源,排队反而更慢。给每个 Agent 设合理的 # of executors,并在系统层面限制。

2.2 Agent 标签与隔离​

标签规划:
linux-x86_64 # 平台
jdk17 / jdk11 # Java 版本
gpu # GPU 构建
high-memory # 内存型任务

流水线用标签选择 Agent:

agent { label 'linux && jdk17' }

3. Master 调优​

3.1 JVM 内存​

Jenkins 以 JVM 运行。调整启动参数(容器场景改环境变量):

# docker-compose 或 Helm values
environment:
JAVA_OPTS: >-
-Xms2g
-Xmx4g
-XX:MaxMetaspaceSize=512m
-Djenkins.security.ignoreExtraProperties=true

要点:

  • -Xmx 根据实例内存设定,留足给 OS 和 Agent 进程;
  • 频繁 Full GC 时用 -Xlog:gc(JDK17)看日志,再决定加不加内存;
  • Master 只做调度,构建全部放 Agent,Master 内存压力会小很多。

3.2 并发与队列​

  • 开启 并发构建:Job 配置 Concurrent Builds 允许同一 Job 并行(注意资源);
  • 限制全局并发:Manage Jenkins → System → Global properties → Concurrent build count;
  • 队列卡住时,查看 Manage Jenkins → Load Statistics,找出一直占用的 Executor。

4. 磁盘与构建清理​

4.1 三大磁盘占用源​

占用清理手段
Workspacespost { always { cleanWs() } },或定期批量清理
构建记录buildDiscarder(logRotator(...)) 保留策略
归档产物大产物进制品仓库,Master 只留诊断包
插件 / 日志定期清 $JENKINS_HOME/logs,插件做更新前清理

4.2 全局保留策略​

// 每个 Job 建议加,或在 Job 配置中设置
options {
buildDiscarder(logRotator(daysToKeepStr: '30', numToKeepStr: '30'))
}

4.3 磁盘监控​

# 监控 $JENKINS_HOME 使用率
df -h /var/jenkins_home
du -sh /var/jenkins_home/* | sort -rh | head

超过 80% 应触发告警(Prometheus node_filesystem 指标),见监控手册。

5. 监控 Jenkins 性能指标​

安装 Prometheus 插件,暴露 /prometheus 端点:

Manage Jenkins → Plugins → 安装 Prometheus Metrics 插件
访问 https://ci.example.com/prometheus

关键指标:

指标反映
default_jenkins_node_onlineAgent 是否在线
jenkins_node_available_children可用执行器
jenkins_queue_size_value队列长度(>0 说明在排队)
jenkins_build_duration_milliseconds构建时长
jenkins_build_result_ordinal构建结果分布
jenkins_jvm_memory_usageMaster JVM 内存
# 队列持续不为空告警
jenkins_queue_size_value > 0
# 离线 Agent 告警
default_jenkins_node_online == 0

6. 性能优化清单​

  • Master 内置节点执行器设为 0,构建全部走 Agent
  • Agent 执行器数按资源合理设置,用标签做资源隔离
  • 每个 Job 配 buildDiscarder 保留策略
  • 每个 Job 的 post { always { cleanWs() } }
  • 大产物进制品仓库,不堆 Master
  • 配置 Prometheus 插件并监控队列、Agent、JVM 指标
  • 磁盘使用率 >80% 有告警

7. 练习与验收​

练习 A

  1. 查看当前所有 Agent 的执行器和负载,找出是否有排队 Job
  2. 给一个 Job 配置 buildDiscarder 和 cleanWs,观察磁盘占用变化
  3. 安装 Prometheus 插件,访问 /prometheus 确认指标输出

练习 B

  1. 用标签区分两个 Agent 池(如 jdk17 / jdk11),让不同流水线选择对应 Agent
  2. 用 LOAD_STATISTICS 页面找出构建高峰时段
  3. 给 Master 配置 JVM 参数(-Xmx),重启观察内存变化

验收清单

  • 能定位构建排队/慢的瓶颈在 Agent、Master、磁盘还是构建本身
  • 会规划执行器数量和 Agent 标签隔离
  • 知道 Master JVM 内存调优要点
  • 会配置构建记录/Workspace/产物清理
  • 会用 Prometheus 指标监控队列、Agent、JVM

下一篇:高可用与备份恢复。