top按1显示的单核条形图是当前采样周期(2–3秒)平均占用率,并非实时走势;真要看趋势需用vmstat+watch、mpstat等工具结合上下文指标交叉分析。

top 里按 1 展开后看到的单核曲线不是实时走势
不少人都会把 top 里按下 1 后顶部那一排每核 CPU 条形图,当成“实时走势”来看。其实并不是这么回事。它展示的只是当前采样周期内的平均占用率,通常是 2–3 秒这一段时间的结果;既没有时间轴,也不能回看,更谈不上导出。说白了,它告诉你的只是“这一刻负载高不高”,而不是“前几秒具体是怎么变的”。如果真想看走势,还是得用那些能持续记录并生成图表的工具。
用 vmstat + watch 看简明趋势(适合终端快速判断)
如果你只需要粗粒度的 CPU 利用率波动(比如验证某操作是否引发持续高负载),vmstat 配合 watch 是最轻量、无需安装的方案:
watch -n 0.5 'vmstat 1 2 | tail -1':每 0.5 秒刷新一次,取最近一次vmstat 1 2的末行(避免首行初始值干扰)- 重点盯
us(用户态)和sy(内核态)两列,它们加起来接近 100% 时说明 CPU 正在被真实计算任务占用 - 如果
wa(iowait)持续 >20%,说明 CPU 在等磁盘/网络,实际执行效率已受阻,不是 CPU 本身慢 - 注意:
vmstat的采样间隔不能设太小(如vmstat 0.1会报错),最小有效值通常是1
mpstat 能输出带时间戳的多核明细,但默认不绘图
mpstat 来自 sysstat 包,是唯一能按毫秒级精度、分核心、带时间戳输出 CPU 各状态占比的命令行工具。但它本身不画图,需配合其他手段可视化:
- 先确认已安装:
sudo apt install sysstat(Debian/Ubuntu)或sudo yum install sysstat(RHEL/CentOS) - 实时流式输出:例如
mpstat -P ALL 1,每秒输出所有核心的%usr、%sys、%iowait等字段 - 想保存数据供后续分析?用
mpstat -P ALL 1 60 > cpu_log.txt记录 60 秒,再用 Python 或 gnuplot 绘图 - 常见坑:
mpstat默认只显示汇总(mpstat 1),必须加-P ALL才能看到各核独立数据
真正意义上的“执行效率走势”要结合上下文指标
CPU 使用率高 ≠ 执行效率高;使用率低也不代表没瓶颈。所谓“执行效率”,本质是单位时间完成的有效工作量。光看 %us 没法判断,必须关联其他信号:
- 若
%us高但top里%CPU列全是同几个进程,且这些进程的TIME+增长缓慢 → 可能卡在锁、系统调用或内存等待上 - 若
%sy异常高(>30%),同时pidstat -w显示大量上下文切换 → 说明进程调度开销大,实际指令执行被稀释 perf top -g能看到函数级热点,比任何走势图都更直接反映“CPU 真正在干什么”,但它是采样型,不提供连续时间轴
真正难的不是画出一条线,而是理解这条线背后,CPU 是在算数、等内存、切上下文,还是空转——这需要把 mpstat、pidstat、perf 的输出交叉比对,而不是依赖单一工具的“走势”图形。