温馨提示×

centos cpustat如何排查

小樊
41
2026-08-04 10:20:58
栏目: 智能运维

在 CentOS 上排查 CPU 问题,cpustat 不是系统默认工具,常见做法分两种:
1️⃣ 使用 cpustat(来自 sysstat 或第三方)
2️⃣ 用更常见的工具组合排查(推荐)

下面按排查思路 + 命令示例说明。


一、先确认你用的是哪种 cpustat

1️⃣ sysstat 里的 mpstat(最常见)

CentOS 通常安装的是 sysstat

yum install -y sysstat

查看 CPU 使用:

mpstat -P ALL 1

含义:

  • %user:用户态
  • %system:内核态
  • %iowait:等待磁盘
  • %idle:空闲

排查重点

  • %iowait 高 → 磁盘瓶颈
  • %system 高 → 内核/中断/系统调用问题
  • %user 高 → 应用 CPU 消耗

2️⃣ 如果是 Go 写的 cpustat(少见)

例如:

cpustat -i 1

一般输出:

  • usr
  • sys
  • idle
  • ctx/s(上下文切换)
  • irq

✅ 重点看:

  • ctx/s 非常高 → 线程争抢
  • irq 高 → 中断问题(网卡、磁盘)

如果不确定来源:

which cpustat
rpm -qf $(which cpustat)

二、用标准工具排查 CPU 问题(强烈推荐)

1️⃣ 看整体 CPU 使用

top

关注:

  • us / sy
  • load average
  • 哪个进程 PID 占 CPU

按:

  • P:按 CPU 排序
  • 1:显示每个 CPU

2️⃣ 找具体进程

ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head

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

vmstat 1

关注:

  • cs(context switch)
  • si/so(swap,异常)
  • us/sy

4️⃣ 看哪个进程在疯狂切换

pidstat -w -u 1
  • -u:CPU
  • -w:上下文切换

5️⃣ 看中断是否异常

watch -n1 'cat /proc/interrupts | sort -k2 -nr | head'

常见:

  • eth0 → 网卡中断
  • nvme → 磁盘中断

三、常见 CPU 问题排查思路

✅ CPU 100%,但 load 不高

→ 单进程死循环

top → 找 PID → strace -p PID

✅ load 很高,但 CPU idle 也高

→ 通常是:

  • 大量 IO 等待
  • 大量线程等待锁
iostat -x 1

✅ 多核不均衡

mpstat -P ALL 1

→ 某核一直 100%
→ 可能是:

  • 单线程程序
  • 中断绑定

四、快速排查模板(可直接用)

top
mpstat -P ALL 1
pidstat -u -w 1
vmstat 1
iostat -x 1

五、如果你愿意,我可以帮你进一步分析

你可以直接贴:

  • top 前 20 行
  • mpstat -P ALL 1 输出
  • 或说明:
    • CPU 是 高 / 低 / 偶尔抖动
    • 数据库 / Java / Nginx / 自研程序

我可以帮你精确定位是 应用 / 内核 / IO / 中断 的问题。

0