cpustat 在 CentOS 上出现卡顿(执行慢、输出延迟、甚至卡住),通常不是 CPU 本身的问题,而是采集数据来源、权限、系统状态或工具本身导致的。下面按最常见 → 较少见给你系统排查。
/proc 或 /sys 被阻塞(最常见)cpustat 本质是从以下路径采集数据:
/proc/stat/proc/<pid>/stat/proc/schedstat/sys/devices/system/cpu/如果以下情况存在,就会卡顿:
/proc 被高并发访问✅ 排查方法:
ps -eo pid,state,comm | awk '$2=="D"'
如果有大量 D 状态进程,很可能导致 cpustat 卡住。
-p 按进程统计(非常慢)例如:
cpustat -p
这会遍历 所有进程,在以下环境会明显卡顿:
✅ 建议:
cpustat -p 1 # 只看前 1 个
或干脆不用 -p
在以下内核或环境中常见:
表现为:
cat /proc/stat 也慢top 也轻微卡✅ 验证:
time cat /proc/stat
如果超过 0.1s,说明系统层面已经慢了。
如果系统开启了:
auditdselinux=enforcingcpustat 被 strace 过可能导致系统调用变慢。
✅ 检查:
getenforce
systemctl status auditd
如果你在:
cpustat 会看起来卡顿,其实是输出慢。
✅ 验证:
cpustat > /tmp/cpu.log
如果写入文件很快,说明是终端问题。
CentOS 默认 没有 cpustat,常见来源:
| 来源 | 说明 |
|---|---|
sysstat |
实际是 mpstat |
cpustat (Go) |
开源工具,遍历进程 |
| 自己写的脚本 | 可能死循环 |
✅ 确认:
which cpustat
rpm -qf $(which cpustat)
如果是 Go 版 cpustat,在进程多时确实会卡。
# 1. 是否有 D 状态进程
ps -eo pid,state,comm | awk '$2=="D"'
# 2. proc 是否慢
time cat /proc/stat
# 3. 是否进程太多
ps -e | wc -l
# 4. 是否终端问题
cpustat > /tmp/t.log
# 5. 是否 -p 导致
cpustat -p 5
如果只是想看 CPU 使用率:
mpstat -P ALL 1
sar -u 1
top
htop
CentOS 上 cpustat 卡顿,90% 是因为进程太多或 /proc 被阻塞,而不是 CPU 本身问题。
如果你愿意,可以把下面信息贴出来,我可以精准判断:
cpustat 来源ps -eo state | sort | uniq -c 的输出