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 常见误区
在资源评审中,以下误区经常导致错误结论:
- 只看平均利用率,忽略单核热点
8核CPU平均利用率40%,但其中1核达到95%,该核上的线程已经饱和。平均利用率掩盖了热点。 - 把iowait当作CPU瓶颈
iowait表示CPU空闲等待I/O,此时CPU并非瓶颈,存储子系统才是。盲目扩容CPU无法解决问题。 - 短时采样代表长期状态
只采集1秒数据看到利用率80%,但业务周期是分钟级,峰值可能仅持续2秒。需要持续采集至少一个完整业务周期。 - 忽略steal时间(虚拟化环境)
在云虚拟机中,%steal表示宿主机抢占当前VM的CPU时间。steal > 10%说明宿主机超分严重,VM性能不可靠。 - 利用率100%才认为饱和
当CPU利用率超过70%–80%时,请求排队延迟已开始非线性增长。等到100%才处理,响应时间已经恶化。
3.5 评审检查清单
在节点资源评审中,针对CPU利用率建议逐项确认:
- 是否同时采集了整体利用率和每核利用率?
- 是否区分了user/sys/iowait/steal?
- 采样时长是否覆盖业务峰值周期?
- 是否与响应时间或队列长度关联分析?
- 虚拟化环境下是否检查了steal时间?
- 阈值是否根据业务SLA做过校准?
核心原则:CPU利用率是“资源繁忙度”的度量,不是“性能好坏”的度量。必须结合饱和度(运行队列长度)和错误率(超时/重试)才能做出完整评审结论。