来源:赵楠 | 发布日期:2026-07-08
Linux Load Average 详解:概念、解读与实战判据
核心认知:Load average ≠ CPU 使用率。它统计的是「需要 CPU 或等待 I/O」的进程数,同时包含 Running (R) 和 Uninterruptible Sleep (D) 两种状态。
一个反直觉的报警场景
监控告警:服务器 load average 到 18,远超阈值。登上去一看:
top - 14:22:31 up 32 days
Tasks: 210 total, 2 running, 208 sleeping
%Cpu(s): 28.3 us, 3.1 sy, 0.0 ni, 62.4 id, 5.8 wa, 0.0 hi, 0.4 si
CPU 空闲 (id) 还有 62%,使用率不到 40%,但 load average 18,服务器也确实在响应变慢。
这就是最常见的误解:load average 高,不一定是 CPU 忙。
Load Average 到底在数什么
Load average 统计的是:过去一段时间内,系统里平均有多少个进程处于「需要 CPU 或正在等待 I/O」的状态。
两类进程被计入:
| 状态 | 含义 | 举例 |
|---|---|---|
| R (Running) | 正在 CPU 上运行,或在运行队列中排队 | 业务进程在计算 |
| D (Uninterruptible Sleep) | 不可中断睡眠,通常卡在等磁盘 I/O | 进程等磁盘读写完成 |
D 状态才是很多人没想到的。一个进程等磁盘读写时,它没消耗 CPU,但依然被计入 load average。这就是为什么 load 高、CPU 低会出现——大量进程卡在等磁盘,CPU 在等它们,谁都没在真正干活。
三个时间窗口
load average: 0.92, 1.45, 1.82
↑ ↑ ↑
1分钟 5分钟 15分钟
均值 均值 均值
| 趋势 | 含义 |
|---|---|
| 1 分钟 > 15 分钟 | 负载上升,可能正在发生问题 |
| 1 分钟 < 15 分钟 | 负载下降,问题在缓解 |
| 三个值接近 | 负载稳定 |
多少算「高」?—— 必须结合 CPU 核心数
很多监控系统把 load average > 1 就标红告警,这个阈值从根本上就是错的。
直觉类比(车道模型):
| 核心数 | load=1 | load=2 | load=4 | load=8 |
|---|---|---|---|---|
| 1 核 | 满载 | 排队×1 | — | — |
| 4 核 | 25% | 50% | 满载 | 排队×1 |
| 8 核 | 12.5% | 25% | 50% | 满载 |
正确判据:load average / CPU 核心数
- < 1 → 正常,每核心平均不到一个进程
- = 1 → 刚好满载,满负荷但不过载
- > 1(持续) → 开始排队,需要关注
分级经验值(2026-09-06 负载排查 SOP 补充):
| Load / 核心数 | 判断 |
|---|---|
| ≤ 1.0 | 系统正常 |
| ≥ 1.5 倍 | 需要关注 |
| ≥ 2.0 倍 | 严重拥堵 |
# 查看 CPU 核心数
nproc
# 或者
grep -c "^processor" /proc/cpuinfo
8 核服务器 load 到 6-7 完全正常;到 20 才真正需要排查。单核轻量云 load 到 2 就已经有进程排队了。
top CPU 行字段详解
%Cpu(s): 28.3 us, 3.1 sy, 0.0 ni, 62.4 id, 5.8 wa, 0.0 hi, 0.4 si
| 字段 | 全称 | 含义 | 排障意义 |
|---|---|---|---|
| us | user | 用户态进程 CPU 时间 | 高 → 应用层计算密集,top 找高 CPU 进程 |
| sy | system | 内核态 CPU 时间 | 高 → 系统调用频繁,可能有大量 I/O 或进程切换 |
| ni | nice | 低优先级进程 CPU 时间 | 通常接近 0 |
| id | idle | CPU 空闲时间 | 低 → CPU 真的忙了 |
| wa | iowait | 等待 I/O 时的空闲时间 | 高 → 不是 CPU 问题,是磁盘/网络 I/O 瓶颈 |
| hi | hardware irq | 硬件中断处理 | 高 → 网卡压力大或硬件问题 |
| si | software irq | 软件中断处理 | 高 → 网络包处理压力大 |
| st | steal | 被虚拟化层偷走的 CPU 时间 | 云服务器上高 → 宿主机资源竞争 |
wa (iowait) 深度解析
wa 是最容易被误读的指标:
- wa 高 + CPU idle 也高 → 少数进程在等 I/O,CPU 整体空闲,大量核心在闲着
- wa 高 + CPU idle 低 → I/O 是真正的瓶颈,CPU 全部在等磁盘
- wa 高 ≠ CPU 忙 — wa 是「CPU 空闲着等 I/O 的时间占比」,不是 CPU 被用满
多核场景下的 wa 陷阱: 8 核服务器,top 显示的 wa 是全局平均值。一个核心 wa = 100%(上面的进程在等 I/O),其余 7 个核心 idle = 100%,全局 wa 只显示 12.5%,但那个核心上的进程已严重拖慢。
常见误区
| 误区 | 正解 |
|---|---|
| load average = CPU 使用率 | load average 统计的是排队等资源的进程数,不只计算 CPU 消耗 |
| load average > 1 就告警 | 必须结合核心数:8 核 load 6 完全正常 |
| wa 高 = CPU 忙 | wa 是「CPU 空闲等 I/O 的时间」,不是 CPU 被用满 |
| 只看一个时间窗口 | 必须看 1/5/15 分钟三个值判断趋势 |
| load 只统计 CPU 请求 | D 状态进程(等磁盘/NFS)也被计入 |
快速诊断命令
# 看 load + 核心数,快速判断
uptime && echo "CPU 核心数: $(nproc)"
# CPU 各维度分解
top -bn1 | head -5
# D 状态进程数(计入 load 但不消耗 CPU)
ps aux | awk '$8 ~ /D/' | wc -l
# I/O 等待情况
vmstat 1 3
关联页面
| 页面 | 关联点 |
|---|---|
| linux-load-high-sop | Load 高全场景 11 步排查流程与 6 场景修复手册(本页概念原理的实战落地) |
| linux-load-high-cpu-low-troubleshooting | Load 高 CPU 低的完整排查决策树,从 vmstat 到 iostat 的逐层诊断 |
| cpu-100-full-chain-diagnosis | CPU 100% 故障排查全链路分析,含 10 大场景速查 |
| cpu-spike-3-commands | 三命令定位 CPU 飙高根因 |
| server-performance-four-dimensions | 服务器性能五维排查框架 |
| linux-server-load-case-study | 服务器负载过高排查实战(Netflix 60 秒法) |
| linux-disk-io-troubleshoot | 磁盘 IO 排查实战 — %util 陷阱与 await 真相。服务器变慢时 CPU/内存正常但磁盘 |
| linux-disk-io-monitoring-reference | 磁盘 IO 监控参考 — iostat/vmstat 字段详解与五指标框架。磁盘使用率/饱和度/IO |
| system-load-high-rsyslogd-case-study | 一个 rsyslogd 被 audit 审计日志刷屏导致的系统负载高案例,涵盖 CPU 拆解、软中断 |
| cpu-spike-troubleshooting-guide | CPU 飙高排查方法论与止损策略 |