mpstat 是 sysstat 工具包中的一个实用命令,用于按 CPU 核心或汇总所有核心报告处理器的使用情况。它的名称来自“multiprocessor statistics”,在多核服务器上尤其有用,因为 top 或 vmstat 通常只给出所有 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. 与其他工具的配合mpstat 比 top 显示了更精确的按核状态,比 /proc/stat 更易读。将其与 pidstat(查看具体进程的 CPU 使用)或 iostat(查看磁盘 I/O)结合,可以在性能分析时快速定位瓶颈层级。
简言之,mpstat 是快速获取“CPU 按核忙什么”的最直接工具,灵活使用它的 -P 参数能让你一眼看清系统多核资源的真实负载状况。