cpustat 是 sysstat 工具集里的一个 CPU 性能分析工具,常用于查看 CPU 使用率、中断、上下文切换、调度统计 等。下面从 安装 → 基本用法 → 输出字段 → 实战分析思路 给你一个完整说明(以 CentOS 7/8 为例)。
yum install -y sysstat
确认版本:
cpustat -V
cpustat
默认输出 系统整体 CPU 统计信息
cpustat 1 5
含义:
cpustat -c
或指定 CPU:
cpustat -c 0 1
cpustat -p
以常见输出为例:
CPU usr sys idle iowait irq soft steal guest guest_nice
all 12 8 75 2 0 0 0 0 0
| 字段 | 含义 |
|---|---|
| usr | 用户态 CPU 使用率(应用程序) |
| sys | 内核态 CPU 使用率 |
| idle | CPU 空闲 |
| iowait | CPU 等待 IO(磁盘/网络) |
| irq | 硬件中断 |
| soft | 软中断 |
| steal | 被虚拟化 Hypervisor 偷走的时间 |
| guest | 虚拟机 CPU |
| guest_nice | nice 的虚拟机 CPU |
看 idle
idle < 20% → CPU 很忙
idle > 80% → CPU 很闲
| 情况 | 分析 |
|---|---|
| usr 高 | 应用本身消耗 CPU(Java / C++ / Python) |
| sys 高 | 系统调用多、IO、锁、网络、中断 |
| usr + sys ≈ 100% | CPU 打到瓶颈 |
iowait > 20% → 磁盘慢或 IO 队列堆积
确认:
iostat -x 1
常见于:
mpstat -P ALL 1
cat /proc/interrupts
steal > 10% → 云主机超卖 / 争抢 CPU
常见于:
cpustat 1
top
mpstat -P ALL 1
pidstat -u 1
perf top
| 现象 | 下一步 |
|---|---|
| usr 高 | 看是哪个进程:top / pidstat |
| sys 高 | 看系统调用:strace / perf |
| iowait 高 | 看磁盘:iostat |
| 某核特别忙 | 看中断:/proc/interrupts |
❌ iowait 高 ≠ CPU 忙
✅ 实际是 CPU 在等 IO
❌ idle 高 ≠ 系统没问题
✅ 可能是 单线程瓶颈
usr 85%, sys 10%, idle 5%
✅ 应用 CPU 是瓶颈
✅ 看进程:
top
iowait 40%, idle 30%
✅ 磁盘慢
✅ 查:
iostat -x 1
如果你愿意,可以把 cpustat 实际输出贴出来,我可以直接帮你分析具体是哪类问题(CPU / IO / 中断 / 虚拟化)。