Linux CPU瓶颈排查神器!mpstat命令超全详解|多核CPU精准监控
1. 命令简介
mpstat 命令是 sysstat 工具集的一部分,用于实时监控多处理器(多核CPU)系统中各个CPU核心的利用率统计信息。它能够清晰地展示用户态、内核态、I/O等待、中断处理等不同维度的CPU时间分配情况,是进行系统性能分析、定位CPU瓶颈和负载均衡问题的重要工具。
2. 语法格式
mpstat [选项] [<间隔时间> [<次数>]]
参数说明:
间隔时间:指定每次统计报告之间的间隔秒数。如果未指定,则只输出一次自系统启动以来的平均统计信息。
次数:指定生成报告的次数。如果指定了间隔时间但未指定次数,mpstat 将持续生成报告,直到手动中断(通常使用 Ctrl+C)。
3. 常用选项及说明
选项 | 说明 |
|---|---|
-P { <cpu> | ALL } | 指定要报告的CPU。<cpu> 是CPU编号(从0开始)。使用 ALL 表示报告所有CPU的统计信息,包括一个 all 的汇总行。这是最常用的选项之一。 |
-I { SUM | CPU | SCPU | ALL } | 报告中断统计信息。SUM:显示系统总中断速率。CPU:显示每个CPU每秒接收的中断数量。SCPU:显示每个CPU的软中断统计信息(需要内核2.6.31+)。ALL:显示以上所有信息。 |
-u | 报告CPU利用率(默认选项)。即使不指定,输出也是CPU利用率信息。 |
-V | 显示 sysstat 工具的版本信息并退出。 |
-o JSON | 以JSON格式输出结果,便于脚本解析(需要 sysstat 11.7.3+ 版本)。 |
-N { <node_list> | ALL } | 在NUMA架构系统中,报告指定内存节点的CPU统计信息。<node_list> 是节点列表(如 0,2 或 0-2)。ALL 表示所有节点。 |
4. 示例用法
显示自系统启动以来的平均CPU利用率(所有CPU汇总)
这是不带任何参数的基本用法,显示一个整体的历史平均值。
mpstat
以2秒为间隔,持续监控所有CPU(包括每个核心和汇总)
这是最经典的实时监控用法,-P ALL 是关键。
mpstat -P ALL 2
按 Ctrl+C 停止。
以3秒为间隔,共采样5次,并显示所有CPU信息
命令将输出5次报告,并在最后给出这5次采样的平均值。
mpstat -P ALL 3 5
仅监控特定的CPU核心(例如,核心0和核心2)
mpstat -P 0,2 1 3
监控系统中断统计信息
显示系统全局中断速率。
mpstat -I SUM 2
显示每个CPU核心的中断数量。
mpstat -I CPU 2
结合 watch 命令进行动态高亮监控
使用 watch 可以刷新屏幕,结合 --diff 可以高亮显示变化的部分。
watch -n 1 --differences=cumulative mpstat -P ALL 1 1
5. 输出字段含义详解(执行 mpstat -P ALL 后常见字段)
字段 | 含义 |
|---|---|
CPU | 处理器编号。all 表示所有处理器的统计平均值。 |
%usr | 在用户级别(应用程序)执行时发生的CPU利用率百分比。 |
%nice | 在用户级别,用于执行 nice 优先级进程的CPU利用率百分比。 |
%sys | 在内核级别(系统调用、中断处理等)执行时发生的CPU利用率百分比。 |
%iowait | 系统有未完成的磁盘I/O请求时,CPU空闲时间的百分比。高值可能表示I/O瓶颈。 |
%irq | CPU用于处理硬件中断的时间百分比。 |
%soft | CPU用于处理软件中断(如网络协议栈处理)的时间百分比。 |
%steal | 在虚拟化环境中,虚拟CPU等待宿主机CPU服务的时间百分比。非零值表示宿主机资源竞争。 |
%guest | CPU运行虚拟机的时间百分比。 |
%gnice | CPU运行低优先级(nice)虚拟机的时间百分比。 |
%idle | CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。 |
6. 注意事项
数据来源:mpstat 的数据来源于 /proc/stat 文件。其统计的是时间片的占用比例,而非CPU的绝对时钟周期。
首次采样:当指定了间隔时间后,第一次报告的数据仍然是自系统启动以来的平均值。从第二次报告开始,才是上一个间隔时间内的瞬时或平均数据。
%iowait 的解释:%iowait 高并不一定意味着磁盘是瓶颈,它只表示CPU在那段时间是空闲的,并且系统恰好有I/O在进行。需要结合 iostat、iotop 等工具综合判断。
%steal 在虚拟化环境:如果虚拟机的 %steal 值持续较高,表明宿主机物理CPU资源紧张,该虚拟机正在与其他虚拟机竞争CPU时间。
安装:大多数Linux发行版默认不安装 sysstat。您可能需要使用包管理器安装,例如:
Ubuntu/Debian: sudo apt install sysstat
CentOS/RHEL/Fedora: sudo yum install sysstat 或 sudo dnf install sysstat
版本差异:不同版本的 sysstat 工具,mpstat 的输出字段可能略有不同(例如,旧版本可能没有 %guest 和 %gnice 字段)。请使用 mpstat -V 查看版本。
获取更多Linux学习资料请关注“阿成学长工具包”,对话框中输入2647获取