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),直接给出任务因资源不足而停顿的时间占比,比负载更适合回答「用户请求是否已经受影响」。排障时可以把两者结合使用。
不要把负载阈值原样复制到不同规格的机器上:核数、磁盘类型、业务形态都会改变合理区间。固定数值告警在扩容后会立刻变成噪声,按核数归一化才有可比性。