温馨提示×

centos cpustat为何卡

小樊
38
2026-10-17 20:36:41
栏目: 智能运维

在 CentOS 上 cpustat 卡住(无输出、长时间不动、命令不返回),通常不是系统真的“死机”,而是数据源或运行方式的问题。下面按最常见原因逐条说明。


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

CentOS 里常见的 “cpustat” 有两类:

  1. sysstat 包的 mpstat / sar 类工具
  2. Go 写的 cpustat(github.com/uber-common/cpustat)

如果是 uber/cpustat,它依赖 perf,问题大多出在这里。


二、最常见原因(按概率排序)

1️⃣ perf 权限不足(最常见)

cpustat(uber 版)底层用:

perf_event_open()

如果:

  • 没 root
  • 或 kernel 限制了 perf

就会卡住或一直等

✅ 解决:

sudo cpustat

或临时放开:

echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid

2️⃣ perf 被 seccomp / 安全策略限制

常见于:

  • Docker 容器
  • OpenShift
  • 开了 hardened kernel

表现:

  • cpustat 启动后无任何输出
  • CPU 占用极低

✅ 检查:

dmesg | grep perf

✅ 解决:

  • 在宿主机运行
  • 或给容器 --privileged

3️⃣ 内核不支持 perf 功能

老内核 / 定制内核可能:

  • 没开 CONFIG_PERF_EVENTS
  • 或虚拟化环境不支持 PMU

✅ 检查:

perf stat ls

如果 perf 也卡,说明不是 cpustat 的问题。


4️⃣ 采样间隔设置不合理

例如:

cpustat -i 0

或极小间隔 + 高 CPU 负载
会导致:

  • 输出 buffer 堵住
  • 看起来像“卡死”

✅ 建议:

cpustat -i 1

5️⃣ 终端 / 输出被阻塞

如果在:

  • nohup
  • 后台任务
  • 管道后面

而消费端不读数据
cpustat 会阻塞在 write()

✅ 测试:

cpustat > /tmp/c.log &
tail -f /tmp/c.log

6️⃣ 系统 CPU 极高 / 调度异常

极端情况:

  • 系统 100% 软中断
  • kworker 卡死
  • NUMA / CPU offlined

✅ 检查:

top
mpstat -P ALL 1

三、快速排查 checklist(建议你照做)

# 1. 是否 root
whoami

# 2. perf 是否正常
perf stat sleep 1

# 3. cpustat 是否卡在 perf
strace -f cpustat 2>&1 | head

如果 strace 卡在:

perf_event_open(...)

✅ 就是 perf 问题(90%)


四、替代方案(更稳)

如果只是为了看 CPU:

mpstat -P ALL 1
sar -u 1
top
htop

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

请告诉我:

  1. CentOS 版本(cat /etc/redhat-release)
  2. 内核版本(uname -r)
  3. 用的是哪种 cpustat(命令路径或来源)
  4. 是否容器环境

我可以直接帮你定位到“卡在哪一行”。

0 踩