温馨提示×

cpustat如何分析性能

小樊
51
2026-08-14 02:10:29
栏目: 编程语言

cpustat 通常指 Linux 下用于分析 CPU 使用情况的工具,常见有两种理解:

  1. sysstat 包中的 mpstat / sar / pidstat(很多人把这类工具统称 cpustat)
  2. 专门的 cpustat 工具(如 cpustat by Thomas Habets,或某些发行版自带)

下面我按 “用 cpustat 分析 CPU 性能” 的通用思路来讲,并补充常见替代方案,方便你对比使用。


一、cpustat 是什么(常见版本)

1️⃣ cpustat(轻量级工具,常见于 Ubuntu/Debian)

sudo apt install cpustat

特点:

  • 实时显示 每个 CPU 的使用率
  • 用户 / 系统 / 空闲 / 等待 IO 分类
  • 类似 top,但更偏向 CPU 视角

二、基本用法

1️⃣ 实时查看 CPU 状态

cpustat

输出示例:

CPU  user  nice  system  idle  iowait  irq  softirq
 0   12.3   0.0    5.1   82.1    0.3   0.0     0.2
 1   10.5   0.0    4.3   84.8    0.2   0.0     0.2

含义:

  • user:用户态 CPU(应用)
  • system:内核态 CPU
  • idle:空闲
  • iowait:等待磁盘 IO(⚠性能瓶颈信号)
  • irq / softirq:中断

2️⃣ 指定刷新间隔和次数

cpustat 1 5

表示:

  • 1 秒刷新一次
  • 5 次

三、如何用 cpustat 分析性能问题

✅ 1. CPU 是否真的瓶颈?

idle

idle < 10%  → CPU 很忙
idle > 30%  → CPU 通常不是瓶颈

✅ 2. 用户态高还是内核态高?

情况 说明
user 很高 应用程序消耗 CPU
system 很高 系统调用、中断、锁、网络/IO
user + system 都高 CPU 打满

✅ 3. iowait 高说明什么?

iowait > 20% → 磁盘 IO 是瓶颈

常见原因:

  • 磁盘慢
  • 数据库大量随机 IO
  • 内存不足导致 swap

✅ 4. 单核瓶颈还是多核不均衡?

cpustat

观察:

  • 是否 某几个 CPU 很高,其他很低
  • 可能是:
    • 单线程程序
    • CPU 亲和性问题

四、结合其他工具深入分析(强烈推荐)

1️⃣ 看进程级 CPU 消耗

top
# 或
htop

看:

  • 哪个进程 %CPU
  • 是否是多线程

2️⃣ 看进程 CPU 详细分布

pidstat -u 1

3️⃣ 看上下文切换 / 中断

vmstat 1

关注:

  • cs(context switch)
  • in(interrupt)

4️⃣ 看 CPU 平均负载

uptime
load average: 8.5, 6.3, 4.1

规则:

  • load > CPU 核数 → 过载
  • load 高但 CPU idle 也高 → IO 等待

五、常见性能问题判断表

现象 可能原因
user 高 应用计算密集
system 高 系统调用多 / 锁
iowait 高 磁盘慢 / 内存不足
idle 高但 load 高 IO 阻塞
单核 100% 单线程瓶颈

六、如果你用的是 sysstat 的 cpustat 系列

mpstat(最常用)

mpstat -P ALL 1

sar(历史分析)

sar -u 1 5

七、典型分析流程(实战)

# 1. 看 CPU 是否忙
cpustat 1

# 2. 看哪个进程
top

# 3. 看是否 IO 问题
iostat -x 1

# 4. 看系统整体
vmstat 1

八、如果你愿意,我可以:

  • ✅ 帮你 解读你当前的 cpustat 输出
  • ✅ 判断是 CPU / IO / 内存 / 锁 问题
  • ✅ 给你 针对数据库 / Java / Go / Nginx 的 CPU 分析思路

你可以直接贴一段 cpustattop 输出。

0