温馨提示×

centos cpustat怎么分析瓶颈

小樊
40
2026-08-30 14:39:16
栏目: 智能运维

在 CentOS 上分析 CPU 瓶颈,cpustat 不是系统默认工具,通常有两种理解方式:

  1. 你实际上在用 mpstat / sar / top / vmstat 等工具(最常见)
  2. 你确实在用 cpustat(如 sysstat 包或 performance tools 里的)

下面我按实战排查思路来讲,重点放在 如何判断 CPU 瓶颈,而不只是看数字。


一、CentOS 上分析 CPU 瓶颈的常用工具

1️⃣ top(最常用)

top

关注点:

  • %Cpu(s)
    • us:用户态 CPU(应用)
    • sy:内核态 CPU(系统调用、中断)
    • wa:IO 等待(⚠️ 不等于 CPU 瓶颈)
    • id:空闲
  • load average
    • 如果 load > CPU 核数 → 可能瓶颈

示例:

%Cpu(s): 85.2 us, 10.3 sy, 0.0 ni, 4.5 id, 0.0 wa

✅ 说明 CPU 主要被用户进程吃掉,可能是业务逻辑问题


2️⃣ mpstat(比 top 更细)

mpstat -P ALL 1

重点看:

  • 单个 CPU 是否全部跑满
  • sys 是否异常高
  • 是否有大量 irq / softirq

示例(异常):

%usr %sys %iowait
90   10    0

✅ 用户态 CPU 飙高 → 应用问题

%usr %sys %iowait
20   60    0

✅ 内核态高 → 系统调用 / 锁 / 驱动问题


3️⃣ vmstat(看整体趋势)

vmstat 1

关键列:

  • r:运行队列(> CPU 核数 = 瓶颈)
  • us / sy
  • wa(IO 等待)
  • cs(上下文切换)

示例瓶颈:

r  b   swpd   free   buff  cache   si   so   bi   bo   in   cs us sy id wa st
12  0   0     100M   0     0       0    0    0    0    1000 5000 80 20  0  0  0

r > CPU 核数 是 CPU 瓶颈最可靠指标之一


二、如果你真的在用 cpustat

1️⃣ 常见来源

  • sysstat
  • cpustat 来自 perf-tools / osquery / 第三方工具

示例:

cpustat 1

通常输出:

  • 每个 CPU 使用率
  • 用户 / 系统 / 空闲
  • 中断、上下文切换

分析思路与 mpstat 一样。


三、如何判断“是不是 CPU 瓶颈”

✅ 判断 CPU 瓶颈的核心指标

现象 是否 CPU 瓶颈
%user 高 ✅ 很可能是
%system 异常高 ✅ 内核 / 锁 / 中断
load > CPU 核数
vmstat r 持续高
%iowait 高 ❌ 多半是磁盘
内存 swap 高 ❌ 内存瓶颈

四、常见 CPU 瓶颈场景与定位方法

场景 1:Java / Python / Go 应用 CPU 100%

top -H -p <pid>
  • 高 CPU 线程
  • Java:
jstack <pid> > stack.txt
  • Go:
go tool pprof http://localhost:6060/debug/pprof/profile

场景 2:sys CPU 高(内核态)

可能原因:

  • 大量系统调用
  • 锁竞争
  • 网络 / 磁盘中断

排查:

perf top

常见输出:

  • futex → 锁
  • schedule → 上下文切换
  • 网卡驱动 → 中断

场景 3:上下文切换过多

vmstat 1
cs 很高

原因:

  • 线程数过多
  • 锁竞争
  • 频繁短任务

五、快速排查流程(推荐)

top
# 看 us / sy / wa / load

vmstat 1
# 看 r / cs

mpstat -P ALL 1
# 看单核是否跑满

perf top
# 找热点函数

六、一句话总结

CPU 瓶颈 ≠ CPU 使用率高
真正瓶颈 = 有任务在等 CPU(run queue)

如果你愿意,可以把 top / vmstat / mpstat 的实际输出贴出来,我可以直接帮你判断是哪一种瓶颈,以及下一步怎么优化。

0