性能优化 #
本节介绍Jenkins性能优化的方法,帮助提高构建效率和系统稳定性。
性能瓶颈分析 #
常见瓶颈 #
text
1. Master节点负载过高
2. 磁盘I/O瓶颈
3. 网络延迟
4. 构建队列积压
5. 插件冲突
监控指标 #
text
- CPU使用率
- 内存使用率
- 磁盘I/O
- 构建队列长度
- 构建平均时长
Master优化 #
减少Master负载 #
text
# of executors: 0-1
将构建任务分发到Agent
Master仅负责调度
JVM调优 #
bash
# 设置JVM参数
java -Xmx4g -Xms2g -XX:+UseG1GC -jar jenkins.war
系统配置 #
text
# /etc/default/jenkins
JAVA_ARGS="-Xmx4g -Xms2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
Agent优化 #
执行器数量 #
text
CPU密集型: 执行器 = CPU核心数
I/O密集型: 执行器 = CPU核心数 × 1.5
节点分布 #
text
根据任务类型分配节点:
- 构建节点: 高CPU
- 测试节点: 高内存
- 部署节点: 高网络带宽
磁盘优化 #
清理旧构建 #
groovy
options {
buildDiscarder(logRotator(
numToKeepStr: '10',
artifactNumToKeepStr: '5'
))
}
工作空间清理 #
groovy
post {
always {
cleanWs()
}
}
磁盘空间监控 #
groovy
stage('Check Disk') {
steps {
script {
def freeSpace = sh(
script: 'df -k . | tail -1 | awk \'{print $4}\'',
returnStdout: true
).trim()
if (freeSpace.toInteger() < 1024 * 1024 * 5) {
error("磁盘空间不足")
}
}
}
}
构建优化 #
并行构建 #
groovy
stage('Test') {
parallel {
stage('Unit Tests') {
steps { sh 'mvn test' }
}
stage('Integration Tests') {
steps { sh 'mvn verify -P integration' }
}
}
}
增量构建 #
groovy
stage('Build') {
steps {
sh 'mvn compile -Dmaven.compiler.useIncrementalCompilation=true'
}
}
跳过不必要的步骤 #
groovy
stage('Test') {
when {
expression { !params.SKIP_TESTS }
}
steps {
sh 'mvn test'
}
}
缓存优化 #
Maven缓存 #
groovy
pipeline {
agent {
docker {
image 'maven:3.8-openjdk-11'
args '-v $HOME/.m2:/root/.m2'
}
}
}
npm缓存 #
groovy
stage('Install') {
steps {
sh 'npm ci --cache .npm'
}
}
Docker层缓存 #
dockerfile
# Dockerfile
FROM maven:3.8-openjdk-11 AS builder
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package
网络优化 #
使用本地镜像仓库 #
groovy
environment {
MAVEN_MIRROR = 'https://maven.example.com/repository/public/'
}
并行下载 #
groovy
sh 'mvn clean package -T 4'
插件优化 #
禁用不必要插件 #
text
Manage Jenkins → Plugins → Installed
禁用不使用的插件
更新插件 #
text
定期更新插件到最新版本
新版本通常包含性能优化
数据库优化 #
清理历史数据 #
groovy
// Script Console
import jenkins.model.*
import hudson.model.*
Jenkins.instance.getAllItems(Job.class).each { job ->
def builds = job.getBuilds()
if (builds.size() > 20) {
builds.drop(20).each { it.delete() }
}
}
归档旧构建 #
groovy
options {
buildDiscarder(logRotator(
daysToKeepStr: '30',
numToKeepStr: '20'
))
}
监控和诊断 #
监控插件 #
text
安装插件:
- Monitoring
- Prometheus metrics
- Performance Plugin
日志分析 #
text
Manage Jenkins → System Log
查看性能相关日志
性能分析 #
groovy
stage('Performance') {
steps {
script {
def start = System.currentTimeMillis()
// 执行任务
def duration = System.currentTimeMillis() - start
echo "耗时: ${duration}ms"
}
}
}
最佳实践 #
1. 定期清理 #
text
- 清理旧构建
- 清理工作空间
- 清理临时文件
2. 资源隔离 #
text
- 使用专用Agent
- 隔离不同类型任务
- 避免资源竞争
3. 监控告警 #
text
- 设置资源告警
- 监控构建时长
- 监控队列长度
4. 定期评估 #
text
- 分析构建趋势
- 识别性能瓶颈
- 持续优化改进
下一步学习 #
小结 #
- 减少Master负载
- 合理配置执行器数量
- 定期清理旧数据
- 使用并行构建
- 配置依赖缓存
- 监控系统性能
最后更新:2026-03-28