Linux

mpstat 命令超详细讲解

·7 分钟阅读·2524 字
📋 目录

mpstat 命令超详细讲解

核心概念 mpstat 是多 CPU 核心性能统计工具,属于 sysstat 工具集,专门定位单核打满、软中断集中等问题。

1. 命令作用

mpstat = MultiProcessor Statistics,多CPU核心性能统计工具,属于 sysstat 工具集。

  1. 单独看整机 top 只能看到整体CPU均值,看不出是哪一颗核心跑满;
  2. mpstat 可以按每个CPU核心分别输出各项占用指标(用户态、内核、软中断、iowait、空闲等);
  3. 专门用来定位:单核打满、软中断集中单核心、多核心负载不均衡等问题。

2. 安装

# CentOS/RHEL
yum install sysstat -y
# Ubuntu/Debian
apt install sysstat -y

3. 基础语法

mpstat [选项] [间隔秒数] [输出次数]

示例:

mpstat -P ALL 1      # 每1秒输出所有CPU核心,持续输出
mpstat -P 0 2 3      # 只看cpu0,每2秒输出一次,共输出3次

4. 常用核心选项

参数含义
-P ALL输出所有CPU核心 + 整机平均(最常用)
-P N只查看指定编号CPU,如 -P 0 仅看第一颗核心
-A等价 -u -I ALL,输出CPU + 中断综合统计
-u默认,输出CPU使用率指标(us,sy,si,idle,iowait)
-I ALL输出硬中断/软中断统计

5. 输出字段完整释义(mpstat -P ALL 1

5.1. 示例输出片段

CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
all    12.34    0.00    5.67    1.20    0.01    8.90    0.00    0.00    0.00   71.88
0      25.10    0.00   10.20    2.10    0.02   22.50    0.00    0.00    0.00   40.08
1       2.10    0.00    1.00    0.30    0.00    0.50    0.00    0.00    0.00   96.10

逐字段解释:

  1. CPU
    all = 所有核心平均值;数字0/1/2… 对应物理CPU核心编号。
  2. %usr
    用户态CPU占比:业务程序、Java/Go/Python应用正常计算消耗。
    us高:业务代码计算量大、死循环、频繁全表查询、大量并发业务。
  3. %nice
    低优先级进程CPU占用,线上几乎都是0,可忽略。
  4. %sys
    内核态CPU耗时:系统调用、iptables/eBPF、内存缺页、进程创建销毁、conntrack处理。
    sys高:内核逻辑过载,不是业务代码问题。
  5. %iowait
    CPU等待磁盘IO的空闲时间占比。
    iowait高:磁盘性能瓶颈、大量随机读写、数据库刷脏页、ES段合并。
  6. %irq
    硬中断CPU耗时(网卡/磁盘硬件触发的硬件中断),一般数值很低。
  7. %soft
    重点:软中断si,对应你之前问的软中断
    网卡收发包、定时器、块设备延迟处理都走软中断;
    %soft 单核心拉满,典型小包风暴、隧道封装、中断不均衡。
  8. %steal
    虚拟机场景:宿主机超分,宿主机抢占CPU,虚拟机被迫等待。
    物理机该值永远0;云服务器steal高代表宿主机资源争抢严重。
  9. %guest / %gnice
    宿主机运行虚拟机的CPU开销,业务机器基本忽略。
  10. %idle
    CPU空闲时间占比,越低代表核心越繁忙。

6. 高频实用命令场景

6.1. 线上排查标准命令(最常用)

每秒刷新,展示每一颗CPU详细指标,定位单核软中断打满:

mpstat -P ALL 1

6.2. 只观察CPU0核心,输出5次后自动停止

mpstat -P 0 2 5

6.3. 同时看CPU使用率 + 所有中断统计

mpstat -A 1

6.4. 只输出整机平均,不区分核心(类似top效果)

mpstat 1

7. 典型异常场景解读(结合生产故障)

7.1. 场景1:某一个CPU核心 %soft 达到90%+,其他核心idle很高

现象:

CPU0 ... %soft 92.00 %idle 3.00
CPU1 ... %soft 1.00  %idle 95.00

根因:网卡中断RSS未均衡,所有网络软中断全部压在CPU0;小包流量、VXLAN/IPIP隧道会加剧。
解决:配置网卡多队列中断亲和,分流到多核心。

7.2. 场景2:所有核心 %iowait 很高,usr很低

磁盘IO瓶颈,程序卡在等待读写磁盘,CPU没事干。
排查搭配 iostat -x 1 定位磁盘读写进程。

7.3. 场景3:所有核心 %usr 整体80%+,idle极低

业务应用计算密集:死循环、大量聚合查询、批量消费无限流。
搭配 perf top / jstack 定位耗CPU业务线程。

7.4. 场景4:所有核心 %sys 偏高

内核过载:上万条iptables策略、海量短连接conntrack、频繁创建销毁进程。
可切换eBPF CNI降低内核开销。

7.5. 场景5:虚拟机 %steal 持续20%以上

宿主机CPU超售,云主机性能受限,建议升级机型或换专用宿主机。

8. mpstat 和 top 的核心区别

  1. top:只能看整机平均CPU,无法区分单个核心负载;看不到单独soft软中断占比;
  2. mpstat -P ALL按核心拆分,精准定位单核瓶颈,单独输出%soft软中断指标;
  3. 排查网络软中断、CPU负载不均衡故障,必须用mpstat,top做不到。

9. 配套联动排查工具

配合mpstat一起定位CPU问题:

  1. 进程占用:top / htop / ps aux --sort=-pcpu
  2. 软中断明细:watch -n1 cat /proc/softirqs
  3. 网卡流量包量:sar -n DEV 1
  4. 磁盘IO:iostat -x 1
  5. 函数级CPU热点:perf top -g