mpstat -P ALL 1是日常排查CPU负载的标准命令,每秒刷新一次,显示所有逻辑核心及all汇总的实时使用率,可有效识别单核过载而其他核心空闲的不均衡问题。

mpstat 默认不显示各核使用率,必须加 -P ALL 才能分核查看——漏掉这个参数,你看到的只是全局平均值,根本发现不了 CPU0 跑满而 CPU3 空闲这种典型负载不均问题。
mpstat -P ALL 1 是日常排查的标准姿势
每秒刷新一次、显示所有逻辑 CPU(含超线程)的实时状态,第一行是整体均值(CPU 字段为 all),后面每行对应一个核心(CPU 0、CPU 1…)。
-
mpstat -P ALL 1持续刷新,适合肉眼观察波动;按Ctrl+C中断 - 想只看一次快照:用
mpstat -P ALL 1 1(间隔 1 秒、采样 1 次) - 间隔小于 0.5 秒(如
mpstat -P ALL 0.1)基本没意义:内核定时器精度有限,且刷屏干扰判断 - 注意时间戳含义:每行开头的时间是该次采样的起始时刻,不是“上一秒”的结果
重点关注 %usr + %sys 和 %iowait 这两组值
%usr 和 %sys 加起来超过 90%,说明该核在忙计算或系统调用;%iowait 高则代表它在空等 I/O,和 CPU 性能无关,该查磁盘或网络。
- 某核
%usr长期 >80% 而其他核%idle>90% → 很可能是单线程程序或未启用多核并发 - 所有核
%iowait都 >20%,但iostat -x 1显示磁盘 util open()/close()) - 某核
%soft异常高(>15%),其他核低 → 检查网卡是否开了 RPS/RFS,软中断没分散开
别把 mpstat 当成进程级工具
mpstat 不输出 PID、进程名或线程信息,它只告诉你“哪个核忙”,不告诉你“谁在忙”。定位具体程序必须配合其他命令。
- 先用
ps -eo pid,psr,comm --sort=-pcpu | head -10看当前占用最高的进程及其运行的核心(psr列) -
psr值为 2 表示此刻在CPU 2上运行,但可能被调度器迁移;用taskset -p <pid></pid>查是否绑核 - 容器环境里,
mpstat显示的是宿主机视角,不是容器 cgroup 限额内的实际消耗 - 虚拟机中若
%steal>5%,说明宿主机 CPU 争抢严重,此时看宿主机的mpstat更有效
安装和启用 sysstat 容易被忽略的一步
装完 sysstat 包不等于 mpstat 就能立刻精准工作——Debian/Ubuntu 默认禁用数据收集服务,/proc/stat 的采样频率可能偏低。
- Ubuntu/Debian:改
/etc/default/sysstat把ENABLED="false"改成"true",再执行sudo systemctl enable sysstat && sudo systemctl start sysstat - RHEL/CentOS:服务通常自动启用,但建议仍运行
sudo systemctl status sysstat确认状态 - 没启用服务时,
mpstat仍可运行,但部分字段(尤其是%iowait)在短时采样下可能不准
mpstat -P ALL 1 显示某核 %idle 接近 0,也不代表它“没空闲能力”——如果进程绑死在那个核上,其他核再闲也分担不了。这时候看的不是数值,而是调度逻辑。


















