很多人会把 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、负载和调度之后,你对“机器现在很忙”这句话就能拆出更有判断力的含义。