温馨提示×

怎样读懂cpustat结果

小樊
41
2026-10-24 03:38:45
栏目: 编程语言

cpustat 通常指两类东西,最常见的是:

  1. Linux 下的 cpustat 工具(如 sysstat 包中的 mpstat / sar 类输出,或 Go 写的 cpustat)
  2. 性能分析里的 CPU 使用率统计输出

下面我以最常见的 CPU 使用率结果为例,教你如何读,并顺带说明常见字段含义。


一、典型 cpustat / mpstat 输出示例

07:30:01 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal   %guest   %gnice    %idle
07:30:01 AM  all    12.3     0.0     5.1     1.2     0.0     0.3     0.0     0.0     0.0    81.1
07:30:01 AM    0    20.0     0.0     8.0     2.0     0.0     0.5     0.0     0.0     0.0    69.5
07:30:01 AM    1     5.0     0.0     2.0     0.0     0.0     0.1     0.0     0.0     0.0    92.9

二、每行代表什么

  • 时间:采样时间点
  • CPU
    • all:所有 CPU 平均
    • 0, 1…:单个 CPU 核心
  • 后面是各类 CPU 时间占比(百分比)

三、关键字段含义(重点)

1️⃣ %usr(用户态 CPU)

  • 用户程序消耗的 CPU
  • 高 → 应用本身在算

✅ 正常偏高也 OK
❌ 持续 90%+ → 应用繁忙


2️⃣ %sys(内核态 CPU)

  • 系统调用、调度、内存、IO 管理
  • 高 → 内核压力大

❌ %sys 长期 > %usr → 可能有:

  • 锁竞争
  • 频繁系统调用
  • 内核问题

3️⃣ %iowait(IO 等待)

  • CPU 闲着等磁盘/网络 IO
  • 不是 CPU 忙,是 IO 慢

❌ 高 → 磁盘慢 / 数据库慢 / 文件读写多


4️⃣ %irq / %soft

  • 硬件中断 / 软中断
  • 网络、磁盘控制器相关

❌ 高 → 网卡、磁盘中断过多


5️⃣ %steal(云环境重要)

  • 被 hypervisor “偷走”的 CPU
  • 只存在于虚拟机

❌ 高 → 云主机超卖、邻居抢资源


6️⃣ %guest / %gnice

  • 虚拟机占用 CPU(宿主机视角)

一般不用太关心


7️⃣ %idle(空闲)

  • 没用掉的 CPU

✅ 高 = 闲
❌ 低(<10%) = 饱和


四、快速判断思路(实战)

✅ CPU 是否瓶颈?

看:

%usr + %sys ≈ 100%
%idle ≈ 0

→ CPU 满了


⚠️ 是算不过来,还是等 IO?

  • %iowait 高 → 不是 CPU 问题,是 IO
  • %usr 高 → 真算得多

☁️ 云服务器特别看

%steal 高 + %idle 低

→ 不是你的问题,是云平台


五、常见误区

❌ iowait 高 = CPU 差
✅ 实际是磁盘/存储慢

❌ idle 低就一定要扩容
✅ 要看是 usr 还是 iowait


六、如果你用的是“Go cpustat”

如果是类似:

cpustat -T 1

输出通常是:

  • user
  • system
  • idle
  • iowait

读法是一样的,只是名字更短。


如果你愿意,可以把你实际的 cpustat 输出贴出来,我可以直接帮你“逐行读 + 判断问题”。

0 踩