You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:47:34