直接运行top后按主键盘数字1可查看各CPU核心实时空闲率,如%Cpu0末尾id值99.7表示CPU0当前空闲99.7%;mpstat -P ALL 1 1输出每核采样周期内平均%idle;/proc/stat中cpuN行第5字段为idle时间,需两次差值计算真实使用率;高%idle不等于无瓶颈,须结合%iowait、%st及进程状态综合判断。

top 按 1 看各核空闲率最直接
直接运行 top,按主键盘上方的数字 1(不是小键盘),顶部立刻显示 %Cpu0、%Cpu1 等多行——每行末尾的 id 值就是该核当前空闲率。比如 %Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id,说明 CPU0 当前空闲 99.7%。
常见误操作:
- 误按小键盘
1:无响应,必须用主键盘数字行 - 看到第一行
%Cpu(s)就停住:那是所有核平均值,掩盖单核卡死或空闲不均 - 在
top -b -n 1非交互模式下按1:无效,-b 模式不支持按键切换
mpstat -P ALL 输出带 %idle 的精确统计
mpstat 不是看瞬时值,而是采样周期内的平均空闲率,适合验证是否长期不均衡。关键命令是:
mpstat -P ALL 1 1:每秒采一次,只取 1 次快照,输出每核的 %idle 字段
mpstat -P ALL 2:每 2 秒刷新一次,持续输出(需 Ctrl+C 中断)
注意参数陷阱:
- 漏掉
-P写成mpstat ALL:报错Unknown option 'A' - 写成
mpstat -p ALL(小写 p):旧版可能兼容,但新 sysstat 要求大写-P -
%idle高 ≠ 无瓶颈:如果某核%iowait同时也高(比如 >20%),说明它在等磁盘,不是真“空闲”
/proc/stat 解析能算出任意精度的空闲率差值
当你要写监控脚本、做告警、或需要比 mpstat 更细的时间分辨率时,/proc/stat 是唯一可靠源头。每行 cpuN 后第 5 个字段是 idle 时间(单位 jiffies,通常 1 jiffy = 0.01 秒)。
快速比对两时刻空闲程度:
grep '^cpu[0-9]' /proc/stat → 记下各核第 5 列数值 → 等几秒再执行一次 → 差值大的核更空闲
真实使用率计算公式是:(total_jiffies_diff - idle_jiffies_diff) / total_jiffies_diff * 100%。别直接信 idle 绝对值,必须用两次读数的差值。
容易忽略的点:
-
/proc/stat里cpu行是所有核总和,cpu0、cpu1才是单核,别混用 - 字段顺序固定但易数错:user、nice、system、idle、iowait……第 5 个才是 idle,不是第 4 个
- 不同内核版本字段数可能不同(如含 guest 字段),稳妥做法是用 awk 提取第 5 列:
awk '/^cpu[0-9]/ {print $5}' /proc/stat
别把 idle 当成“剩余资源”的唯一指标
空闲率高不代表系统健康。比如:
- 某核
%idle95%,但%iowait也 80%:它在等 I/O,实际已卡住 - 所有核
%idle都高,但 load average 却飙升:可能是不可中断睡眠进程(D 状态)在阻塞,top里看S或D状态进程 - 虚拟机里
%st(steal time)高:CPU 时间被宿主机“偷走”,%idle再高也没用
真正要判断“还剩多少可用 CPU”,得同时看 %idle、%iowait、%st 和进程状态,不能只盯一个数字。


















