mpstat -P ALL 1 是观察各CPU核心负载趋势最可靠的方式,每秒输出每个逻辑核的%usr、%sys、%iowait、%idle等字段,可识别不均衡、中断集中、容器限频及NUMA误判等问题。

mpstat -P ALL 1 是唯一能看清走势的命令
想看各核心负载随时间变化的趋势,mpstat -P ALL 1 是目前最可靠、最易脚本化的方式。它每秒输出一行完整快照,包含每个逻辑核的 %usr、%sys、%iowait、%idle 等字段,连续观察就能看出“谁在扛、谁在闲”。漏掉 -P ALL 就只剩 CPU all 这一行平均值,完全掩盖不均衡——比如 CPU0 一直 %usr > 90% 而 CPU7 长期 %idle > 95%,全局平均可能才 30%,根本看不出问题。
-
mpstat -P ALL 1输出第一行是汇总(CPU all),后面每行对应一个核(CPU 0、CPU 1…),字段含义稳定,适合人眼扫读或 awk/grep 解析 - Ubuntu/Debian 用户注意:
/etc/default/sysstat中ENABLED="false"是默认值,不改成true并重启sysstat服务,%iowait在短时采样下会严重偏低 - 别用
top按 1 键凑合:它只显示瞬时非空闲占比,不区分%usr/%sys/%iowait,更不反映中断分布;htop的彩色条形图好看,但顶部 CPU 行只显示总占用,进程列表里也看不到该进程跑在哪一核(需额外ps -eo pid,psr,comm查)
识别真实不均衡的三个关键组合信号
不能只盯着 %usr 数值高低,得看多个字段的联动模式。以下任意一条成立,基本可判定是真实不均衡,不是采样抖动:
-
CPU 0行%usr > 85%且%idle ,其余核 <code>%idle > 90%→ 单线程程序或未启用并发,问题在应用层,不是调度器没干活 - 所有核
%soft > 12%,但集中在CPU 0~2,其他核几乎为 0 → 网卡软中断没分散,查/proc/interrupts和 RPS 设置 -
%irq在某核异常飙升(如 > 8%),同时%idle同步暴跌 → 硬件中断扎堆,常见于 NVMe 或 USB 设备驱动问题
容器和虚拟机环境里的盲区
mpstat -P ALL 1 显示的是宿主机视角,跟容器 cgroup 限额无关。如果你在容器里看到负载高,但宿主机上 mpstat 显示各核都很闲,大概率是容器被限频了,而不是 CPU 不够用。
- 想确认容器内实际 CPU 消耗,得用
pidstat -u -C "java" 1这类进程级工具,按进程名过滤采集 - 虚拟机里如果
%steal > 5%,说明宿主机正在抢 CPU,guest 里再怎么看mpstat都没意义——这时要查宿主机,而不是调 guest 的调度参数 - 双路服务器上,先用
lscpu看 NUMA 节点分布,再用numastat查内存访问是否跨节点,否则可能把 NUMA 访问延迟误判为 CPU 不均衡
脚本化采集时别只读 /proc/loadavg
自动化监控中常写 cat /proc/loadavg | awk '{print $1}' 抓 1 分钟负载,但这只拿到指数衰减平均值,漏掉了最关键的实时排队长度。真正反映“此刻有多少进程在等”的是第四字段(如 2/124 中的 2)。
- 推荐做法:
awk '{print $1, $4}' /proc/loadavg,同时拿到平均负载和瞬时就绪+阻塞进程数 - 想画趋势图,直接
mpstat -P ALL 1 | grep -E "^(CPU|all)"加时间戳记录,比解析/proc/stat里的 raw cpu 时间更准、更省事 - 注意:CentOS Linux 7.9.2009 已停止维护,
sysstat包版本较老,-o JSON不可用,脚本里别硬依赖 JSON 输出


















