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 回看历史的顺序推进效率最高。