如何测量GitLab CI各作业的资源(内存、CPU等)消耗?
在GitLab CI作业中测量资源消耗的方法
完全可以通过添加脚本实现每个作业的资源消耗统计,以下是具体实现方案:
核心思路
利用系统自带的监控工具(如mpstat、free、ps)结合时间记录,在作业启动时初始化监控,结束时汇总CPU、内存、耗时等数据,最终输出你需要的格式。
具体实现步骤
1. 整合到作业配置中
以你提供的assembleRelease作业为例,通过before_script初始化监控,after_script汇总数据(after_script会在作业成功/失败后都执行,适合收尾统计):
assembleRelease: stage: build when: manual tags: - a_tag before_script: - *script_1 - *script_2 - *script_3 # 记录作业启动时间 - START_TIME=$(date +%s) # 后台启动CPU核心监控,每秒记录一次 - (while true; do mpstat -P ALL 1 1 >> cpu_usage.log; sleep 1; done) & - MONITOR_PID=$! script: - do stuff after_script: # 计算作业总耗时 - END_TIME=$(date +%s) - PROCESS_TIME=$((END_TIME - START_TIME)) # 获取系统总内存 - TOTAL_RAM=$(free -h | awk '/Mem:/ {print $2}') # 获取当前作业进程的内存占用(转换为GB) - JOB_MEM=$(ps -o rss= -p $$ | awk '{printf "%.1f GB", $1/1024/1024}') # 从监控日志中提取各CPU核心的平均使用率 - CPU_USAGE=$(awk '/Average:/ && $2 != "all" {printf "%.0f%% CPU %s", $3, $2}' cpu_usage.log | paste -sd ", " -) # 输出格式化结果 - echo "\"$TOTAL_RAM RAM, $CPU_USAGE, process time $PROCESS_TIME sec., $JOB_MEM memory\"" # 清理后台监控进程 - kill $MONITOR_PID 2>/dev/null
2. 环境依赖说明
- 确保GitLab Runner所在的机器安装了
sysstat包(提供mpstat工具),如果没有,可在before_script中添加安装命令:- apt-get update && apt-get install -y sysstat # Debian/Ubuntu系 # 或 - yum install -y sysstat # RHEL/CentOS系 free、ps、awk等工具为Linux系统默认自带,无需额外安装。
3. 简化版方案(无需实时监控)
如果不需要逐秒监控CPU平均使用率,仅需结束时的瞬时值,可简化脚本:
assembleRelease: # 其他配置不变 before_script: - *script_1 - *script_2 - *script_3 - START_TIME=$(date +%s) script: - do stuff after_script: - END_TIME=$(date +%s) - PROCESS_TIME=$((END_TIME - START_TIME)) - TOTAL_RAM=$(free -h | awk '/Mem:/ {print $2}') - JOB_MEM=$(ps -o rss= -p $$ | awk '{printf "%.1f GB", $1/1024/1024}') - # 获取瞬时CPU核心使用率 - CPU_USAGE=$(mpstat -P ALL 1 1 | awk '/Average:/ && $2 != "all" {printf "%.0f%% CPU %s", $3, $2}' | paste -sd ", " -) - echo "\"$TOTAL_RAM RAM, $CPU_USAGE, process time $PROCESS_TIME sec., $JOB_MEM memory\""
效果示例
执行后作业日志会输出类似格式的内容:
"16G RAM, 72% CPU 0, 45% CPU 1, process time 34 sec., 2.1 GB memory"
内容的提问来源于stack exchange,提问作者Ralf Wickum
相关产品推荐
相关产品推荐

