mpstat是linux中用于监控多核cpu各核心使用情况的实时性能工具,属于sysstat包,可显示用户态、内核态、i/o等待、空闲等时间占比,支持按核心(-p all)持续采样并输出带时间戳的细分指标。

top 命令里看不到“执行效率”,只有占用率
很多人搜“CPU执行效率”其实是想看 CPU 干活的“实际产出”和“空转比例”——但 Linux 没有直接叫“执行效率”的指标。你看到的 %us、%sy、%id、%wa 都是时间占比,不是吞吐量或指令执行速度。真正反映“干活是否高效”的,是结合 %wa(等待 I/O)和 %id(空闲)来看:如果 %wa 高而 %id 低,说明 CPU 在等磁盘/网络,不是它慢,是它被卡住;如果 %id 长期 >90% 但业务响应慢,那可能是单线程瓶颈或锁竞争,不是 CPU 效率问题。
用 mpstat -P ALL 1 看每核实时波动
mpstat 是唯一能稳定输出带时间戳的每核 CPU 细分指标的命令,适合观察走势:
- 安装:
sudo apt install sysstat(Debian/Ubuntu)或sudo yum install sysstat(RHEL/CentOS) - 运行:
mpstat -P ALL 1—— 每秒刷新一次,显示所有逻辑核的%usr、%sys、%iowait、%idle - 关键点:
%iowait>5% 持续出现,大概率是磁盘或 NFS 延迟;%idle突降至 0 而%usr未同步飙升,可能有大量短时进程抖动 - 导出数据:
mpstat -P ALL 1 60 > cpu_trend.log可存 60 秒数据,后续用 awk/gnuplot 绘图
sar -u 1 60 要先启用日志收集
sar 的优势是能查历史走势,但默认不记录 —— 它依赖 sysstat 的 cron 任务:
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 确认服务已启用:
sudo systemctl is-enabled sysstat(应返回enabled) - 检查日志路径:
/var/log/sa/sa$(date +%d),比如今天是 08 日,就看/var/log/sa/sa08 - 查今日每秒采样:
sar -u 1 60 -f /var/log/sa/sa08(注意:-f 后必须跟完整路径,不能用 ~ 或 $PWD) - 常见坑:
sar -u默认只显示聚合值,加-P ALL才分核;sar时间戳是采集时刻,不是命令执行时刻,别拿它和 top 实时值硬比
真要画趋势图?别手写脚本,用 pidstat + ts
如果目标是生成带时间轴的折线图(比如监控告警),pidstat 比 top/mpstat 更适合按进程维度抓数据:
- 按秒采样所有进程 CPU:
pidstat -u 1 300 | ts '%Y-%m-%d %H:%M:%.S' > pid_cpu.log(需先sudo apt install moreutils装ts) - 过滤关键进程:
pidstat -u 1 300 | grep 'java\|nginx' | ts '%H:%M:%.S' - 注意:
pidstat -u输出的%CPU是进程级总和,不是单线程;若进程多线程,得配合-t参数看线程级,否则会高估“单个任务”的开销 - 别用
top -b -n 1抓趋势:它的输出含控制字符且格式不稳定,pidstat和mpstat才是为自动化设计的
真正难的是区分“CPU 用得多”和“CPU 用得冤”——%wa 和 %idle 的组合信号,比单纯看 %us 高低重要得多。很多性能问题根本不在 CPU 本身,而在它等的那块 SSD 或远端 API。










