3、CPU利用率(Utilization)

CPU利用率是USE指标体系中最核心的指标之一,直接反映资源繁忙程度。本章从定义、测量方法、理想阈值与常见误区四个维度展开,帮助评审人员准确判断CPU是否存在性能瓶颈。

3.1 CPU利用率的定义

CPU利用率指在特定时间窗口内,CPU处于非空闲状态的时间占比。计算公式为:

CPU利用率 = (总时间 - 空闲时间) / 总时间 × 100%

在操作系统层面,CPU时间通常细分为:

  • 用户态(User):执行应用程序代码的时间
  • 内核态(System):执行系统调用与内核代码的时间
  • 等待I/O(iowait):CPU空闲但等待磁盘/网络I/O完成的时间
  • 硬件中断/软中断(irq/softirq):处理中断服务的时间
  • 空闲(Idle):CPU完全无事可做的时间
评审要点:仅看“总体利用率”容易掩盖问题。必须区分用户态、系统态和iowait,才能定位瓶颈是计算密集、锁竞争还是I/O等待。

3.2 测量方法

不同操作系统提供不同的工具链,但核心指标一致。下表列出主流测量工具与对应指标:

操作系统 工具 关键指标 采样方式
Linux top / htop %us, %sy, %wa, %id, %st 实时刷新(默认3秒)
Linux mpstat -P ALL 1 每核usr/sys/iowait/idle 间隔1秒持续输出
Linux /proc/stat user, nice, system, idle, iowait, irq, softirq, steal 自系统启动以来的累计值
Windows 性能监视器(PerfMon) Processor\% Processor Time 计数器采样
macOS top / iostat CPU usage (user/sys/idle) 实时刷新

推荐使用 mpstat -P ALL 1 5 采集5次1秒间隔的数据,观察每核利用率分布。单核高利用率可能被多核平均值掩盖。

# 示例:mpstat 输出片段
Linux 5.10.0 (host)  2025-03-21  _x86_64_  (8 CPU)

10:32:01  CPU  %usr  %sys  %iowait  %idle
10:32:02  all  45.2  12.8   8.5     33.5
10:32:02    0  78.3  15.2   3.1      3.4
10:32:02    1  22.1   8.9  12.3     56.7
10:32:02    2  35.6  14.1  10.2     40.1
10:32:02    3  44.8  13.0   8.4     33.8
测量建议:采集时长至少覆盖业务的一个完整请求周期(通常30秒以上),避免短时突发导致误判。对于延迟敏感系统,建议使用1秒粒度而非5秒聚合。

3.3 理想阈值

CPU利用率并非越低越好,也非越高越差。USE体系推荐以下阈值参考:

指标维度 健康区间 关注区间 危险区间 说明
整体利用率(所有核平均) < 60% 60% – 80% > 80% 超过80%时排队概率显著上升
单核利用率(最忙核) < 70% 70% – 90% > 90% 单核热点可能导致整体性能瓶颈
系统态占比(%sys) < 10% 10% – 20% > 20% 过高可能表示系统调用频繁或锁竞争
iowait占比 < 5% 5% – 15% > 15% 表示CPU在等待I/O,实际瓶颈在存储
阈值不是真理:对于批处理任务,CPU利用率长期90%以上可能完全正常;对于实时交易系统,60%可能已经触发告警。阈值必须结合业务SLA和响应时间曲线来校准。

3.4 常见误区

在资源评审中,以下误区经常导致错误结论:

  1. 只看平均利用率,忽略单核热点
    8核CPU平均利用率40%,但其中1核达到95%,该核上的线程已经饱和。平均利用率掩盖了热点。
  2. 把iowait当作CPU瓶颈
    iowait表示CPU空闲等待I/O,此时CPU并非瓶颈,存储子系统才是。盲目扩容CPU无法解决问题。
  3. 短时采样代表长期状态
    只采集1秒数据看到利用率80%,但业务周期是分钟级,峰值可能仅持续2秒。需要持续采集至少一个完整业务周期。
  4. 忽略steal时间(虚拟化环境)
    在云虚拟机中,%steal表示宿主机抢占当前VM的CPU时间。steal > 10%说明宿主机超分严重,VM性能不可靠。
  5. 利用率100%才认为饱和
    当CPU利用率超过70%–80%时,请求排队延迟已开始非线性增长。等到100%才处理,响应时间已经恶化。
CPU利用率评审决策流程 采集CPU利用率数据 整体利用率 > 80% 或单核 > 90%? 检查 %sys / %iowait / %steal %sys > 20% → 锁竞争/系统调用瓶颈 %iowait > 15% → 存储I/O瓶颈 %steal > 10% → 宿主机超分 定位根因 → 扩容/优化/降级 注意:利用率低于阈值但响应时间恶化时,需检查中断亲和性、NUMA失衡或CPU降频

3.5 评审检查清单

在节点资源评审中,针对CPU利用率建议逐项确认:

  • 是否同时采集了整体利用率和每核利用率?
  • 是否区分了user/sys/iowait/steal?
  • 采样时长是否覆盖业务峰值周期?
  • 是否与响应时间或队列长度关联分析?
  • 虚拟化环境下是否检查了steal时间?
  • 阈值是否根据业务SLA做过校准?
核心原则:CPU利用率是“资源繁忙度”的度量,不是“性能好坏”的度量。必须结合饱和度(运行队列长度)和错误率(超时/重试)才能做出完整评审结论。