首页/系统/Linux 运维命令速查/mpstat 按核看 CPU 分布
性能与监控48 条

mpstat 按核看 CPU 分布

多核机器上 CPU 不均:mpstat -P ALL 逐核显示 us/sy/soft/iowait,定位绑核、软中断与单核打满。

Linux 运维命令速查系统更新于 2026-10-13

mpstat 是什么

mpstat 来自 sysstat 套件,按 CPU 核逐个报告使用率分解(%usr、%sys、%iowait、%soft、%steal、%idle)与中断统计。整机 CPU 看着不高但业务卡顿,常见原因就是某一核被打满,而 mpstat -P ALL 正是把这种不均衡暴露出来的工具。

基本信息

适用平台Linux(sysstat 包,Debian 系可能需单独安装)
命令语法mpstat [-P 0,1|ALL] [间隔] [次数]
常用选项-P 指定核或 ALL -I 中断统计(SUM/CPU/SCPU 等) -u 使用率(默认) -o JSON 结构化输出
输出对象每核一行,加上 All 汇总行;首行通常是自开机以来的平均值
权限说明普通用户可读

典型使用场景

  • 多核不均衡:确认是单核热点、绑核问题还是中断集中
  • 网络吞吐上不去:%soft 高而 %sys 也高,常见于软中断压在一两个核上
  • IO 瓶颈分辨:%iowait 高说明核在等磁盘,而不是在算
  • 虚拟化环境评估:%steal 高说明被宿主机其他虚拟机抢占
  • 脚本采样:加间隔与次数做定长采样,配合 -o JSON 便于入库

常用示例

常用示例
mpstat -P ALL 1 3                 # 每核每秒采样,共 3 轮
mpstat -P 0,1 2 5                 # 只看 0 号与 1 号核
mpstat -I SUM 2 3                 # 中断总量统计
mpstat -I CPU -P ALL 1 3          # 每核中断分布
mpstat -P ALL 1 3 | awk '$NF>80'  # 找出空闲率低于 20% 的核

输出列读法

列含义怎么看
%usr用户态占用应用计算为主,偏高属正常业务负载
%sys内核态占用偏高常见于系统调用密集、上下文切换多
%iowait等待 IO 的时间占比高说明瓶颈在磁盘,先看 iostat
%soft软中断处理占用高常见于网络小包或高 PPS 场景
%steal被宿主机抢占的 CPU虚拟机里偏高是邻居压力,应用侧无法解决
%idle空闲占比单核 %idle 接近 0 而其他核闲,说明负载没摊开
CPU 列核编号 all 为汇总对比各核差异最能说明问题
iowait 高说明该核在等 IO,不要据此判断应用有 bug;%soft 高常见于网络小包洪峰与中断集中。软中断默认由收到网卡中断的核处理,所以单核网卡中断多时会出现「一核忙到死、其余空闲」。
不带间隔与次数运行时,mpstat 输出的第一行是自开机以来的平均值,会被长时间的均值稀释而不反映当下;做判断时用「间隔 次数」模式,并忽略第一行。
工具分工要清楚:mpstat 回答「哪个核在忙、忙在什么态」,pidstat 回答「哪个进程在忙」,iostat 回答「磁盘侧压力多大」,sar 回答「过去一段时间的历史趋势」。查 CPU 问题按 mpstat 找核、pidstat 找进程、sar 回看历史的顺序推进效率最高。

易错点

  • 不指定间隔时看到的是开机以来的均值,无法反映瞬时压力,要用 mpstat -P ALL 1 5 这类采样
  • 负载不均衡时不要只看 all 汇总行:单核满而汇总不高是常见形态,必须逐核看
  • irqbalance 关闭或配置不当时中断可能全落在 CPU0,结合 /proc/interrupts 核实
  • %iowait 属于 CPU 视角的等待时间,多核上它的含义与单核不同,需结合 iostat 一起判断
  • 容器内看到的核数与 CPU 配额取决于运行时的 cpuset 与限额,与宿主机拓扑不一致

数据来源与参考

  • man 1 mpstat(sysstat)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌