uptime1/5/15 分钟平均 load,看趋势是在涨还是在落。
约 1273 字大约 4 分钟
2026-05-14
“load 很高”是不是就等于“CPU 忙不过来”?不一定。CPU 使用率和 load average 是两个相关但不同的指标——分不清它们,就会把一个 I/O 问题当成 CPU 问题去查。这篇讲清两者的区别,以及 CPU 飙高时怎么定位到具体进程。
区分 CPU 使用率和 load average,理解 load 的数值要结合核数看,知道高 load 也可能是 I/O 而非 CPU。
uptime1/5/15 分钟平均 load,看趋势是在涨还是在落。
top按 CPU 排序,看 %us、%sy、%wa、%id 各占多少。
ps aux --sort=-%cpu | head按 CPU 占用排序,定位到具体 PID。
mpstat -P ALL 1是所有核都忙,还是单个核被打满。
这两个指标回答的是不同的问题:
top 里的百分比)。uptime 给出三个 load 值,是 1、5、15 分钟的平均:
load average: 4.20, 3.80, 2.10
# 1分钟 5分钟 15分钟三个值一起看趋势:4.2 > 3.8 > 2.1 说明负载在上升;反过来则在回落。
load 是个绝对数字,得结合 CPU 核数才有意义。粗略标准:
nproc 看核数。8 核机器 load 6,不算紧张;2 核机器 load 6,已经严重排队了。脱离核数谈“load 高不高”没有意义。
这是最关键的一条认知。load 把“等 I/O 的任务”也算了进去。所以会出现:load 很高,但 top 里 CPU 使用率并不满。
这种情况,元凶通常是 I/O——进程都卡在等磁盘 / 等网络存储上(top 里 %wa,I/O wait,会很高)。这时候你再怎么查 CPU 都是错方向,应该转去查 I/O 排查。
判断口诀:
| 现象 | 大概率原因 | 往哪查 |
|---|---|---|
| load 高,CPU 使用率也高(%us 高) | 真有进程在猛算 | ps --sort=-%cpu 找进程 |
| load 高,但 CPU 使用率不满,%wa 高 | I/O 瓶颈 | I/O 排查 |
| load 高,CPU 不满,%wa 也不高 | 可能大量进程在等锁等资源 | 看 D 状态进程 |
确认是 CPU 型的高负载(%us 高),下一步揪进程:
top # 按 P 排序,看最上面是谁
ps aux --sort=-%cpu | head # 同样按 CPU 排序
top -Hp PID # 进一步:这个进程的哪个线程在吃 CPU找到进程后,再结合它的日志(见 日志系统基础)判断它为什么在猛算——是正常高峰、死循环 bug、还是被攻击。
别一看 load 高就 kill 进程
高 load 时直接 kill 掉占 CPU 最高的进程,风险有两个:① 它可能就是核心业务进程,杀了就是事故;② 如果根因是 I/O,你杀掉的“CPU 大户”根本不是元凶,问题依旧。正确顺序:先用 top 的 %us / %wa 分清是 CPU 型还是 I/O 型,再定位进程,再结合日志判断它该不该被处理。排查命令(uptime、top、ps、mpstat)都是只读的,放心用;kill 才是有副作用的动作,要谨慎(见 信号与 kill)。
| 误区 | 更稳妥的做法 |
|---|---|
| 把 load 和 CPU 使用率当成一回事 | load 含排队和等 I/O 的任务,和 CPU 使用率是两个指标 |
| 看 load 绝对值就判断高不高 | 要除以核数看,8 核 load 6 和 2 核 load 6 完全不同 |
| load 高就一头扎进 CPU 排查 | 先看 %wa,高 load + CPU 不满多半是 I/O |
| 高 load 直接 kill CPU 占用最高的进程 | 先分清类型、定位进程、看日志,再决定动不动手 |
版权归属:Shuo Liu