首页/系统/Linux 内核与性能调优速查/load average 负载均值解读
CPU 与调度60 条

load average 负载均值解读

1/5/15 分钟负载指数平均:统计运行队列与不可中断(D 状态)任务;必须与 CPU 核数比较才有意义。

load average 是什么

load average 是内核给出的三档负载指数:1 分钟、5 分钟、15 分钟的平均值,数据源是 /proc/loadavg。Linux 的统计口径包含两类任务:处于可运行状态(R,包括正在运行和排队等 CPU)的任务,以及处于不可中断睡眠(D,多为等待磁盘或网络文件系统 I/O)的任务。它不是 CPU 使用率百分比,绝对数值必须与机器可用的 CPU 核数一起看才有意义:同样是负载 8,4 核机器已经在排队,32 核机器还很轻松。

基本信息

数据源uptime、/proc/loadavg、top 输出的 load average 行
统计口径可运行任务加上不可中断睡眠任务,按核数累加
三档均值1 分钟反映瞬时、15 分钟反映长期趋势
判读基准与 nproc 得到的可用处理单元数比较,单核接近 1 即满载
容器注意未做隔离时读到的是宿主机数值,与容器配额无关
补充指标PSI(/proc/pressure/cpu、io)更适合判断实际排队与停顿

典型使用场景

  • 快速判断机器是否过载:登录后第一眼看 uptime,与核数对比建立初步结论
  • 区分 CPU 密集与 I/O 阻塞:负载高但 CPU 空闲时,多半是 D 状态任务在等存储
  • 容量趋势观察:比较 1 分钟与 15 分钟档,判断压力是突发还是持续累积
  • 告警配置参考:按核数归一化后设阈值,比固定数值更贴近真实容量
  • 故障后复盘:结合 vmstat 的 r 与 b 两列,还原当时的排队结构

采集与归一化

采集与归一化
uptime                          # 一行看三档负载与运行时长
cat /proc/loadavg               # 前三个数即三档负载,后两段是运行任务数与最近进程号
nproc                           # 当前可用的处理单元数,作为判读基准
lscpu | grep -E '^CPU\(s\)'      # 逻辑核总数
# 负载除以核数得到每核负载,接近 1 表示基本满载,超过 2 通常已有明显排队
vmstat 1 5                      # r 列看排队任务,b 列看不可中断任务

相关指标读法

指标含义正常与异常
load 1 分钟最近一分钟的平均负载远高于 15 分钟档说明是突发尖峰
load 15 分钟长期趋势值持续高位说明容量长期不足,不是瞬时问题
vmstat r可运行队列长度(含正在运行)持续大于核数说明 CPU 排队
vmstat b不可中断睡眠任务数明显大于零说明大量任务卡在存储或网络文件系统上
/proc/loadavg 第 4 段运行任务数除以总任务数分子长期接近分母说明调度压力大

判断压力来源

判断压力来源
mpstat -P ALL 1 3              # 逐核使用率,看是否单核打满
pidstat -u 1 3                 # 谁在消耗 CPU
pidstat -d 1 3                 # 谁在造成磁盘压力
iostat -x 1 3                  # 设备利用率与等待队列,交叉验证 b 列来源
Linux 把不可中断睡眠计入负载,这是与其他 Unix 系统最容易混淆的一点:一台磁盘性能严重不足的机器,CPU 大部分时间空闲,负载却可能长时间停在几十。看到负载高但 CPU 使用率低,第一反应应当是查存储和网络文件系统,而不是加 CPU。
容器里读到的 load average 通常来自宿主机内核,和容器自己的 CPU 配额没有对应关系。此时可以直接看 cgroup 的 CPU 统计与 PSI 压力文件来评估容器实际受限程度,宿主负载只作为旁证。
负载是指数移动平均,对突发很迟钝:短促的尖峰可能被平滑掉,长时间的高负载也会在压力消失后缓慢回落。要定位瞬时问题应改用 vmstat、mpstat 这类带时间窗口的采样工具。
较新内核提供 PSI 压力指标(/proc/pressure/cpu 与 io),直接给出任务因资源不足而停顿的时间占比,比负载更适合回答「用户请求是否已经受影响」。排障时可以把两者结合使用。
不要把负载阈值原样复制到不同规格的机器上:核数、磁盘类型、业务形态都会改变合理区间。固定数值告警在扩容后会立刻变成噪声,按核数归一化才有可比性。

易错点

  • 把负载当百分比读:负载 4 在 2 核机器上是严重过载,在 32 核机器上很轻松,不除核数就得不出结论
  • 负载高就认定 CPU 不足:D 状态 I/O 等待同样计入,先看 vmstat 的 r 与 b 两列区分方向
  • 只看 1 分钟档下结论:瞬时值和长期趋势要一起看,单档数值容易误判突发与慢性问题
  • 在容器里拿宿主机负载判断自己的容量:容器配额与宿主负载无关,应看 cgroup 与 PSI 指标
  • 负载回落就认为问题自愈:平滑算法会让数值滞后下降,仍需确认当时的延迟指标是否已恢复正常

数据来源与参考

  • man 1 uptime(load average 定义)
  • Linux 内核 Documentation/filesystems/proc.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌