Linux Load Average 异常排查:别只盯着 CPU

从运行队列、不可中断睡眠和容器限额三个方向理解 Load Average,快速区分 CPU、I/O 与调度问题。

文章目录 · 4 节

Load Average 表示正在运行或等待不可中断资源的任务数量,并不等同于 CPU 使用率。高负载而 CPU 空闲,通常意味着任务在等待磁盘、网络文件系统或内核资源。

判断是否真的异常

先把负载与逻辑 CPU 数量比较:

uptime
nproc
cat /proc/loadavg

持续 15 分钟负载超过 CPU 数量才值得重点关注。短暂的一分钟尖峰可能只是批任务或发布造成的正常波动。

区分运行与等待

vmstat 1
mpstat -P ALL 1
ps -eo state,pid,comm,wchan:32 --sort=state | head -30

vmstatr 高且 CPU user/system 高,说明计算资源不足;b 高或大量进程处于 D 状态,优先检查磁盘、NFS 和块设备。wchan 能帮助定位进程卡在哪个内核等待点。

容器环境还要检查 CPU throttling。宿主机 CPU 看似空闲时,容器可能已经触发 cgroup 限额。

常见误判

  • 只看瞬时 top,没有观察至少一个业务周期
  • 看到高负载立即扩容,却忽略挂死的 NFS
  • 把容器 CPU 限额问题误判为节点容量不足
  • 忽略僵尸进程和不可中断睡眠任务

收尾清单

确认瓶颈类型后,再选择优化 SQL、拆分批任务、修复存储、调整限额或扩容。不要用“Load 高”作为结论,它只是一条入口信号。