导读:本期聚焦于又改需求创作的《Debian中如何用mpstat命令查看CPU利用率的各项细分指标?》,敬请观看详情。用 top 观察 CPU 整体占用率往往会漏掉单核被软中断打满的情况。mpstat 能把 usr、sys、iowait、irq、soft、steal 等指标按核心拆开,方便在 Debian 服务器上定位性能瓶颈。本文以 Debian 12 为例,演示 sysstat 包安装、mpstat 命令参数、输出字段的准确含义,并给出多核环境下的排查思路。通过 mpstat -P ALL 每秒采样,可以快速区分用户态计算、内核态处理、IO 等待还是虚拟化偷取占用了 CPU 时间。文章还会介绍如何定时记录以及启用 sar 历史数据,帮助你建立长期监控基线,避免临到故障才手忙脚乱。

mpstat 是 sysstat 工具包中的一个轻量级命令行工具,用来报告 CPU 的使用情况。与 top 或 htop 不同,mpstat 能把 CPU 时间细分为用户态、系统态、IO 等待、硬中断、软中断、虚拟化偷取等类别,并且可以按每个核心分别输出。Debian 的官方仓库默认包含 sysstat 包,但最小化安装通常不会自动带上,需要手动安装。

Debian中如何用mpstat命令查看CPU利用率的各项细分指标?

这篇内容会从安装步骤开始,逐步拆解 mpstat 的输出字段,再结合多核场景给出实际排查思路,最后补充定时采样和 sar 历史数据的方法。

一、安装 sysstat 与基础用法

在 Debian 上安装 sysstat 比较简单,执行 sudo apt update 和 sudo apt install sysstat 即可。安装完成后,mpstat 命令会直接出现在系统中。需要注意的是,sysstat 服务默认不会自动开启,但这并不影响 mpstat 的实时查看功能;服务只负责定时采集并写入 /var/log/sysstat/ 目录,供 sar 回溯历史数据。

最简单的用法是不加任何参数直接运行 mpstat,此时输出的是系统自启动以来的平均 CPU 统计,只有一行 all 数据。更有实际意义的是指定采样间隔和次数,例如 mpstat 1 5 表示每秒采样一次,共采样 5 次。命令输出类似下面:

Linux 6.1.0-18-amd64 (debian) 	10/20/2024 	_x86_64_	(4 CPU)

04:15:22 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:15:23 PM  all    2.00    0.00    1.25    0.00    0.00    0.25    0.00    0.00    0.00   96.50
04:15:24 PM  all    1.50    0.00    1.00    0.00    0.00    0.25    0.00    0.00    0.00   97.25
04:15:25 PM  all    3.25    0.00    1.75    0.00    0.00    0.50    0.00    0.00    0.00   94.50
04:15:26 PM  all    2.00    0.00    1.25    0.00    0.00    0.25    0.00    0.00    0.00   96.50
04:15:27 PM  all    1.75    0.00    1.00    0.00    0.00    0.25    0.00    0.00    0.00   97.00
Average:     all    2.10    0.00    1.25    0.00    0.00    0.30    0.00    0.00    0.00   96.35

这个输出只显示了所有核心的平均值。如果服务器有 4 个核心,但其中一个核心已经被单线程任务占满,平均后的 %usr 可能仍然不高。要看到每个核心的独立统计,需要使用 -P ALL 参数,例如 mpstat -P ALL 1 3。此时 CPU 列会出现 0、1、2、3 以及 all,分别对应每个逻辑核心和整体平均。

二、mpstat 输出字段逐一拆解

mpstat 的百分比字段直接来自 Linux 内核 /proc/stat 中的 CPU 时间统计。每一列表示 CPU 在该状态下消耗时间占总时间的比例,所有非空闲字段相加之后,剩下的就是 %idle。理解这些字段的准确含义,是定位性能问题的前提。

%usr 表示运行用户态进程的时间,不包括 nice 调整过的进程;%nice 表示运行 nice 值为正的用户态进程时间,也就是低优先级任务;%sys 表示内核态运行时间,比如系统调用、内存管理、进程调度等,但不包括中断处理。%iowait 是比较容易误解的一列,它表示 CPU 处于空闲状态且系统中有未完成的磁盘 IO 请求。换句话说,%iowait 高并不等于 CPU 正在忙,而是说明磁盘子系统响应慢,连累了整体处理速度。%irq 是硬件中断处理时间,%soft 是软件中断处理时间,网络数据包收发通常会在软中断中处理大量工作。%steal 常见于云主机或虚拟化环境,表示虚拟机等待物理 CPU 的时间,也就是被宿主机或其他虚拟机偷走的时间。%guest 是运行虚拟 CPU 的时间,%gnice 是运行低优先级虚拟 CPU 的时间。%idle 则是完全空闲的时间,没有任何任务需要 CPU 处理。

可以借助下表快速对比这些指标的含义:

字段含义常见高值场景
%usr普通用户态程序计算密集型应用、死循环
%sys内核态系统调用频繁系统调用、文件系统压力
%iowait空闲且有未完成IO磁盘慢、存储瓶颈
%irq硬件中断网卡、磁盘控制器中断
%soft软件中断网络收发包、定时器
%steal虚拟化偷取宿主机超卖、云主机争抢
%idle完全空闲正常空闲或低负载

实际排查时,不要看到 %iowait 高就以为 CPU 负载大。比如一台服务器磁盘响应时间达到 200 毫秒,%iowait 可能显示 60%,但 %usr 和 %sys 都很低,此时 CPU 大部分时间在等待 IO,并没有真正执行计算,重点应该转移到磁盘或存储链路。

三、多核环境下的单核瓶颈定位

多核服务器上的性能问题往往具有局部性。单个进程如果只用满一个核心,整体平均 CPU 使用率可能只有 12.5%(8 核服务器),但如果该进程是业务关键路径,响应延迟会明显上升。mpstat 的 -P ALL 正是为这种场景设计的。

例如在 4 核 Debian 主机上执行 mpstat -P ALL 1,可能看到如下结果:

04:20:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:20:02 PM  all   26.00    0.00    3.50    0.00    0.00    0.25    0.00    0.00    0.00   70.25
04:20:02 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
04:20:02 PM    1    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
04:20:02 PM    2    1.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
04:20:02 PM    3    1.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00

从输出可以看出,0 号核心的 %usr 达到 100%,其他核心几乎空闲,整体平均只有 26% 左右。此时不应该急着扩容 CPU,而是先找到占用 0 号核心的进程。可以使用 top -H 或 pidstat -t 1 查看线程级 CPU 使用情况,再结合应用日志确认是否可以优化为多线程或调整 CPU 亲和性。

软中断分布不均是另一个常见问题。如果某块网卡的队列都绑定到同一个 CPU 核心,该核心的 %soft 会显著高于其他核心,而 %usr 可能并不高。这时候可以检查 cat /proc/interrupts 中的中断计数,或者使用 ethtool -l eth0 查看网卡队列数量。解决办法通常是开启 irqbalance 服务,或者手动将不同队列的中断请求绑定到不同核心。

四、定时采样、日志记录与 sar 历史数据

实时排查用 mpstat 1 5 已经足够,但有些性能问题只在特定时间段出现,比如凌晨备份任务或者促销高峰。此时需要把 mpstat 的输出持续写入文件。最简单的方式是执行 mpstat 5 > /tmp/mpstat_$(date +%F).log,让命令在后台运行。不过这种方式无法区分时间戳,后续分析时需要结合文件修改时间。

更推荐的方式是启用 sysstat 自己的数据收集服务。在 Debian 中,可以编辑 /etc/default/sysstat,将 ENABLED 的值设为 true,然后执行 systemctl restart sysstat。服务会按照 /etc/cron.d/sysstat 中的计划任务定时采集,默认每 10 分钟记录一次,数据保存在 /var/log/sysstat/ 目录下,文件名类似 sa20241020。之后就可以用 sar -u -P ALL -f /var/log/sysstat/sa20241020 查看历史数据,也可以直接 sar -u -P ALL 查看当天记录。

如果日志文件较大,可以使用 awk 提取特定指标超过阈值的行。例如下面的命令从 mpstat 输出中筛选出任意核心 %iowait 大于 10 的记录:

grep -E '^[0-9]|^Average' /tmp/mpstat.log | awk '$7+0 > 10 {print $0}'

注意 mpstat 输出中,%iowait 是第 7 列,字段顺序可能因版本略有差异,使用前建议先查看表头确认列号。通过长期采样,可以建立性能基线,当某一项指标偏离基线时就能更快发现异常。

五、与其他工具配合,形成完整排查链路

mpstat 解决的是“CPU 时间花在哪里”的问题,但它不会告诉你具体是哪个进程造成的。因此在实际故障诊断中,mpstat 通常与 pidstat、iostat、vmstat 搭配使用。比如当 mpstat 显示 %sys 很高时,可以运行 pidstat -d 1 查看哪些进程产生了大量系统调用或上下文切换;当 %iowait 高时,运行 iostat -x 1 查看具体磁盘的 await 和 %util;当 %soft 高时,通过 /proc/interrupts 和 ethtool 分析中断来源。

另外不要忽略虚拟化环境中的 %steal。如果云主机上的 mpstat 长期显示 %steal 超过 5%,说明宿主机资源紧张,或者同宿主机邻居负载过高。这种情况下在客户机内部做任何优化都很难有效果,需要与云服务商确认或迁移实例。Debian 的 mpstat 和 sar 都能正常报告 %steal,这是判断云主机性能是否被宿主机影响的重要依据。

总之,把 mpstat 作为每日巡检的第一步,能够快速建立 CPU 细分指标的感性认识。遇到波动时,结合其他 sysstat 工具深入分析,才能避免盲目重启或扩容。

mpstatCPU利用率Debian修改时间:2026-10-05 03:30:26

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1005/65822.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。