人人都会AI编程

mpstat:全局 CPU 状态统计

更新时间:2026-07-12

mpstat 是 sysstat 工具包中的一个实用命令,用于按 CPU 核心或汇总所有核心报告处理器的使用情况。它的名称来自“multiprocessor statistics”,在多核服务器上尤其有用,因为 topvmstat 通常只给出所有 CPU 的总体视图,而 mpstat 可以让你清楚地看到每个 CPU 核心分别都在忙什么,从而发现负载不均衡、单核瓶颈或特定核心的异常行为。

1. 基本用法
最简单的用法是直接运行 mpstat,它会显示自系统启动以来所有 CPU 的平均统计数据:

mpstat

若要实时监控,可以指定采样间隔(秒)和次数。例如,每 2 秒采样一次,共输出 5 次:

mpstat 2 5

如果想单独查看某个核心(例如 CPU 0)的详细数据:

mpstat -P 0 1

或列出所有核心的逐核统计:

mpstat -P ALL 1

参数中的 1 代表每秒刷新一次,直到按 Ctrl+C 停止。

2. 输出解读
一次典型的 mpstat -P ALL 1 输出会为每个 CPU 产生一行,核心指标如下:

CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
  0     2.50    0.00    1.50     0.00    0.00    0.00    0.00    0.00    0.00   96.00
  1     0.00    0.00    0.50     0.00    0.00    0.00    0.00    0.00    0.00   99.50
  • CPU: 核心编号,all 行表示所有核心的平均值。
  • %usr: 用户态进程(普通应用程序)占用 CPU 的百分比。
  • %nice: 调整了 nice 值(优先级)的用户态进程占比。
  • %sys: 内核态(系统调用、内核线程等)消耗的 CPU 百分比。如果 %sys 持续过高,通常意味着 I/O 密集或频繁的系统调用。
  • %iowait: CPU 等待磁盘 I/O 完成而空闲的时间百分比。如果这个值较高(如持续 >10%),说明磁盘可能是瓶颈,而 CPU 本身并未真正被充分利用。
  • %irq / %soft: 分别表示处理硬件中断和软中断所占用的 CPU 比例。网络密集型应用中 %soft 可能明显升高。
  • %steal: 虚拟化环境下,CPU 被宿主机(hypervisor)占用的时间。如果 %steal 较高,说明宿主机资源过载,你的虚拟 CPU 需要和其他虚拟 CPU 争抢物理资源。
  • %idle: 完全空闲的时间比,理想情况下越高说明 CPU 越闲(前提是不存在 %iowait 和 %steal 的干扰)。

3. 实用场景

  • 检查负载均衡:当某个应用进程无法被多核负载均衡时,常会表现为某个 CPU 的 %usr 很高而其他核心接近空闲。通过 mpstat -P ALL 可以立刻识别出这种“热门核心”问题,从而引导绑定 CPU 亲和性(affinity)或优化程序架构。
  • 判断 I/O 等待:如果所有 CPU 的 %iowait 都持续较高,说明存储系统整体响应偏慢;若只有个别核心的 %iowait 高,则可能与中断分布的亲和性有关。
  • 虚拟化环境排查:在云主机上,如果 %steal 常驻 5% 以上,可联系云供应商确认资源争用情况,或考虑更换宿主机。
  • 中断与软中断分布:网络吞吐量大的机器可通过 %irq%soft 观察网卡中断对不同 CPU 的压力,辅助调整中断绑定(irqbalance)策略。

4. 与其他工具的配合
mpstattop 显示了更精确的按核状态,比 /proc/stat 更易读。将其与 pidstat(查看具体进程的 CPU 使用)或 iostat(查看磁盘 I/O)结合,可以在性能分析时快速定位瓶颈层级。

简言之,mpstat 是快速获取“CPU 按核忙什么”的最直接工具,灵活使用它的 -P 参数能让你一眼看清系统多核资源的真实负载状况。