很多人会把 CPU 使用率高、load 高、上下文切换多混成一件事,但它们并不完全等价。CPU 使用率反映的是执行忙不忙,load 反映的是可运行和不可中断任务积压多不多,而上下文切换反映的是调度切换频率。

如果不把这几个概念拆开,你就很容易出现一种常见误判:看见 load 高就说 CPU 打满,看见 CPU 高就说代码有死循环。真实情况往往更复杂。

机器“忙”是一种结果,不是原因,关键是看清到底是谁让它忙。

为什么这一篇重要

CPU 和负载是最常见的系统健康信号之一,理解错了,后面很多性能判断都会偏。

先把核心问题想清楚

  • CPU 使用率、系统负载和上下文切换描述的是不同维度的忙碌。
  • load 高不一定等于 CPU 满,也可能是 IO 或锁等待带来的积压。
  • 上下文切换过多常常意味着线程模型或竞争方式有问题。

实战里更该关注什么

  • 把用户态 CPU、内核态 CPU、iowait 分开看。
  • 结合进程视角判断到底是哪个服务在制造压力。
  • 遇到 load 异常时,优先判断是计算瓶颈还是等待瓶颈。

常见误区

  • 把 load average 直接当作 CPU 使用率理解。
  • 只看总 CPU,不看 user、system、iowait 的分布。
  • 看到上下文切换高,却不追线程数和锁竞争。

一个值得自己做的小练习

让一段程序分别制造纯计算负载和大量 IO 等待,对比 CPU、load 和上下文切换指标会怎么变化。

小结

理解 CPU、负载和调度之后,你对“机器现在很忙”这句话就能拆出更有判断力的含义。