Ubuntu Jenkins资源如何分配
小樊
42
2025-12-24 07:45:44
Ubuntu 上 Jenkins 资源分配实践
一 规划与基线
- 明确硬件基线:中小型团队建议至少 4 核 CPU、8GB 内存(推荐 16GB)、100GB SSD 用于 JENKINS_HOME;并发构建越多,内存与 CPU 需相应增加。
- 控制并发度:在 Manage Jenkins → Configure System → Executors 设置执行器数量,通常不超过 CPU 物理核心数,避免资源争用。
- 扩展策略:通过 Master–Agent(多节点/分布式构建) 将任务分摊到代理节点,主节点专注调度与管理。
二 宿主机直接部署的 JVM 与系统资源
- 设置堆内存:编辑 /etc/default/jenkins,配置 JAVA_ARGS 或 JENKINS_JAVA_OPTIONS,示例将最大堆设为 4GB:
- JAVA_ARGS=“-Xmx4096m”
- 或 JENKINS_JAVA_OPTIONS=“-Xms512m -Xmx2048m -Djava.awt.headless=true”
- 使配置生效并验证:
- sudo systemctl restart jenkins
- ps -ef | grep jenkins(应看到 -Xmx/-Xms 参数)
- 建议同时设置最小堆 -Xms 与最大堆 -Xmx 一致,减少运行时扩缩堆带来的抖动。
三 Docker 部署的资源限制
- 为容器设置 CPU/内存上限(避免构建任务抢占宿主机):
- docker run 方式:docker run -d -p 8081:8080 -v ./jenkins_data:/var/jenkins_home --cpus=“1” --memory=“1500m” jenkins/jenkins:lts-jdk11
- docker-compose 方式:
- deploy.resources.limits.cpus: ‘1’
- deploy.resources.limits.memory: ‘1500M’
- 可选:为容器内 Docker 构建优化 /dev/shm(共享内存),在宿主机 /etc/docker/daemon.json 设置:
- “default-shm-size”: “256m”
- 注意:容器内存上限需略大于 Jenkins JVM 堆(例如堆 4GB 时,容器内存可设 5–6GB 留出元空间、JIT、GC 等开销)。
四 并发与分布式构建的分配策略
- 全局并发控制:在 Executors 设置合理数值,通常不超过 CPU 核心数;结合构建时长与资源占用逐步调优。
- 流水线并行:在 Jenkinsfile 使用 parallel 将互不依赖的阶段并行执行,缩短总耗时。
- 多节点扩展:在 Manage Jenkins → Manage Nodes and Clouds 添加 Agent 节点,按标签调度任务,主节点只做协调。
五 监控与持续优化
- 监控手段:使用 Java VisualVM、JConsole 观察堆使用、线程、类加载等指标,结合 GC 日志判断是否需要调整堆或并发。
- 构建环境优化:仅安装必要插件并定期更新;为 Maven/Gradle 配置依赖缓存;定期清理工作区与旧构建产物,避免磁盘膨胀。
- 系统层面:确保 Ubuntu 具备足够的处理能力、内存与磁盘空间,并保持网络稳定以降低拉取依赖与上传制品的时延。