mpstat命令未安装或报错需先安装sysstat包,ubuntu/debian用sudo apt install sysstat并启用enabled="true",centos/rhel用sudo yum/dnf install sysstat并启用服务;首次使用前须运行sudo /usr/lib/sa/sa1触发采集;查看各cpu核心实时使用率必须用mpstat -p all 1(all全大写);%iowait高不等于磁盘忙,需结合iostat -x和pidstat -d判断真实i/o瓶颈;历史数据依赖sadc采集存于/var/log/sa/sadd,需启用sysstat服务并调整保留天数。

mpstat 命令没输出或报 “command not found”
说明 sysstat 包根本没装,mpstat 不是 Linux 内置命令。CentOS/RHEL 默认不装,Ubuntu/Debian 也常缺。
- Ubuntu/Debian:运行
sudo apt install sysstat,装完可能需手动启用数据收集(改/etc/default/sysstat里ENABLED="true") - CentOS/RHEL:用
sudo yum install sysstat(8+ 用dnf),装完服务默认不自动启,可选运行sudo systemctl enable --now sysstat - 装完别急着跑
mpstat,先执行一次sudo /usr/lib64/sa/sa1(路径可能为/usr/lib/sa/sa1)触发首次采集,否则首次调用可能显示空或历史无数据
想看每个 CPU 核心的实时使用率,但 mpstat 只显示 “all”
mpstat 默认聚合所有核心,必须加 -P ALL 才展开单核视图。
- 正确命令:
mpstat -P ALL 1(每秒刷新一次,显示所有核心) - 错误写法:
mpstat 1或mpstat -P all—— 注意大小写,ALL必须全大写,小写会被忽略 - 如果只关心某几个核(比如 0 和 3),可用
mpstat -P 0,3 2,但注意内核编号从 0 开始,且不能超出lscpu显示的 CPU(s) 总数 - 输出中
%usr、%sys、%iowait等列才是真实负载指标;%idle高≠系统空闲——可能卡在中断或软锁
mpstat 显示的 %iowait 很高,但 iostat 看磁盘并不忙
这是常见误判点:%iowait 并不等于“磁盘在等”,而是“CPU 在等 I/O 完成且当时无其他任务可运行”的时间占比。它依赖调度器状态,不是 I/O 延迟的直接度量。
- 当系统有大量进程阻塞在 I/O(如读慢盘、NFS 超时),但 CPU 本身空闲,
%iowait就会虚高 - 若
%idle同时也很高(比如 >90%),基本可判定是假等待——CPU 实际没活干,只是统计上记了一笔“等 I/O” - 真瓶颈要结合
iostat -x 1看%util和await,或用pidstat -d 1定位具体进程的 I/O 行为 - 虚拟机环境尤其容易误导:
%iowait可能反映的是宿主机资源争抢,而非客户机磁盘本身
需要长期记录 CPU 每核使用率,但 mpstat 默认不存历史
mpstat 本身是查看工具,历史数据靠 sadc(sysstat 的采集守护进程)存到二进制文件里,路径通常是 /var/log/sa/saDD(DD 是日期)。
- 确认采集是否开启:
systemctl is-active sysstat,若为inactive,需启用并启动服务 - 查某天每核数据:用
mpstat -P ALL -f -s -S CPU -P ALL -d /var/log/sa/sa15(15 号日志),-f强制解析,-s显示时间戳 - 注意 sa 日志默认只保留 7 天(由
/etc/cron.d/sysstat控制),如需更久,得改sed -i 's/7/30/' /etc/sysconfig/sysstat并重启服务 - 导出为 CSV 分析?别用
mpstat直接转,它不支持;应先用sadf -d /var/log/sa/sa15 | grep 'cpu\['提取原始字段再处理
sysstat 或没启采集,二是把 %iowait 当磁盘瓶颈直接优化——结果调了半天 IO 调度器,发现是应用层逻辑阻塞导致的伪等待。










