必须用mpstat -p all,因其是唯一能分核、分时、带字段语义(%usr/%sys/%iowait/%idle等)的实时分布视图;top按1仅图形化示意且缺关键细分项,vmstat不区分核心,htop不默认安装且无数值字段。

直接看 mpstat -P ALL,这是唯一能分核、分时、带字段语义的实时分布视图。其他命令要么汇总(top 默认只给平均值),要么缺字段(vmstat 不区分核心),要么不默认安装(htop 的条形图好看但看不到 %iowait 具体数值)。
为什么必须用 mpstat -P ALL 而不是 top 1
top 按 1 键确实能显示每核曲线,但它只是图形化示意,不输出可解析的数值列;且默认不显示 %iowait、%steal 等关键细分项。而 mpstat -P ALL 每行对应一个逻辑 CPU,字段含义明确:%user、%system、%iowait、%idle 全都有,单位统一为百分比,适合人工快速扫读或脚本提取。
- 执行
mpstat -P ALL 1后,首行是全局平均(CPU字段为all),后面才是各核明细 -
%iowait高 ≠ 磁盘慢,可能是单个进程卡在 sync 或 NFS 响应上,需结合pidstat -u 1定位 - 如果某核
%idle长期低于 5%,而其他核空闲,大概率是进程绑核(taskset)或 NUMA 亲和性导致
mpstat 输出里哪些字段容易被误读
%iowait 和 %idle 是最常被混淆的两个字段:前者表示 CPU 在等待 I/O 完成时“主动让出”的时间,后者是真正空闲、无任何任务可执行的时间。它们之和不等于 100%,中间差的是 %user、%system 等运行态时间。若 %iowait > 20% 且 %idle 很低,说明 I/O 成了瓶颈;若 %iowait 高但 %idle 也高,则更可能是进程主动 sleep,而非 I/O 卡住。
-
%steal> 0 表示宿主机 CPU 资源被其他虚拟机抢占,物理机上不会出现 -
%nice只统计优先级被调低(nice值 > 0)的进程,普通业务几乎为 0 - 所有百分比列都是该采样周期内的算术平均,不是瞬时峰值
想抓 5 秒内的峰值数据,参数怎么配
用 mpstat -P ALL 0.5 10:0.5 秒间隔 × 10 次 = 5 秒窗口,比 1 秒间隔更能捕捉短时毛刺。注意它会在末尾额外输出一行 Average:,那是整个窗口的均值,不是最后一条采样——别把它当峰值用。
- 避免用
mpstat -P ALL 0.1 50这类高频采样,会显著增加调度开销,尤其在负载已高的机器上 - 如果要存历史数据做回溯,得开
sysstat服务,mpstat本身不落盘 - 输出中 CPU 编号(如
CPU 0)对应/proc/cpuinfo里的processor字段,可交叉验证是否超线程核心
真正麻烦的是多 NUMA 节点服务器上看到某几个核持续高负载,而内存带宽和缓存命中率都正常——这时候得查进程是否跨 NUMA 访存,mpstat 只能告诉你“哪里忙”,不能解释“为什么忙”。











