性能优化 #

本节介绍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