cpustat 是 sysstat 工具包里的 CPU 监控组件,适合快速确认系统当前是否存在处理器压力,但它本身并不能回答“是谁导致了高负载”“是不是磁盘拖慢了 CPU”这类更关键的问题。更实用的做法,是把 cpustat 放进一套联动排查流程里:先看 CPU 表现,再对照进程、内存、I/O、历史趋势和调用热点逐层缩小范围,这样判断会更稳,也更接近真实故障现场。
先定位异常进程:cpustat + top / htop
在日常排障里,最先要回答的问题通常不是“CPU 高不高”,而是“到底谁在吃 CPU”。这时可以让 cpustat 和 top 或 htop 同时工作:一个盯 CPU 统计变化,一个看进程列表和资源占用。
这种组合的价值在于,cpustat 负责告诉你异常已经发生,top 或 htop 则帮助你把异常对应到具体进程。尤其是在 CPU 突然拉高的瞬间,如果只看总量,很容易错过真正占用资源的对象;而配合实时进程视图,通常能马上看到哪个进程占比异常、线程是否集中、内存是否同步上涨。
如果是短时尖峰,建议在一个终端持续运行 cpustat,另一个终端保持 top 或 htop 刷新,这样更容易在异常出现时第一时间抓到现场。对运维来说,这是最轻量、也最常用的一步。
判断是算力问题还是 I/O 问题:cpustat + vmstat + iostat
很多 CPU 异常并不一定真的是“算不过来”。有时是进程排队、有时是上下文切换过多,也有时是磁盘 I/O 把任务拖住了,结果表现成 CPU 指标不好看。要把这些情况分开,就需要引入 vmstat 和 iostat。

用 vmstat 看系统资源是否整体拥堵
vmstat 提供的是更广角的系统快照,覆盖进程、内存、分页、块 I/O、陷阱以及 CPU 活动。它和 cpustat 的关系很明确:前者补全上下文,后者聚焦 CPU 本身。

当 cpustat 显示 CPU 已经跑满时,可以马上查看 vmstat 里的进程队列、上下文切换等信息。如果发现运行队列明显堆积,说明任务可能确实在争抢 CPU;如果等待情况更突出,则可能不是纯粹的计算瓶颈,而是其他系统资源让进程卡住了。
用 iostat 验证磁盘是不是瓶颈
如果 cpustat 显示 CPU 等待时间,也就是 iowait 偏高,就不能只盯着处理器看了。此时更该检查磁盘子系统,因为“CPU 高”有时候只是 I/O 问题映射出来的结果。

iostat 专门用于观察输入/输出设备负载。把它和 cpustat 搭配起来后,就能进一步看磁盘读写响应时间、队列长度等指标。如果这些数据明显偏高,基本就可以判断问题源头不在 CPU,而在磁盘响应能力跟不上业务请求。
从当前异常追到历史趋势和代码热点:cpustat + sar + perf
当你已经确认“CPU 的确有问题”,下一步通常要回答两个更深入的问题:这是偶发波动还是持续问题?如果看进程还不够清楚,资源到底耗在了哪里?这时 sar 和 perf 分别对应两个不同层面的分析。
sar 负责历史回溯
sar 和 cpustat 同属 sysstat 家族,但用途并不重复。cpustat 更适合看当前,sar 则擅长收集和报告历史系统活动信息。
一个很典型的排查路径是:先用 cpustat 确认现场确实异常,再通过 sar 查看过去几小时甚至几天的 CPU 使用趋势。这样可以判断故障是偶发尖峰、固定时段出现,还是已经持续存在了一段时间。对容量规划和问题复盘来说,这一步非常关键,因为它决定你后续该临时止损,还是要做系统性优化。
perf 负责深入到内核和代码层
如果 top 里看不出明显异常进程,或者某个进程看起来正常但 CPU 仍然居高不下,就要把分析往更底层推进。perf 是 Linux 内核自带的性能分析工具,能追踪系统调用、函数调用以及硬件事件。
和 cpustat 相比,perf 的作用不是告诉你“高了”,而是帮你解释“为什么高”。它可以进一步分辨资源消耗到底来自内核模块,还是用户态程序的某段代码。在复杂性能问题里,这一步往往决定排障能否从现象走到根因。
把监控做成可复用流程:dstat、日志分析与自动化脚本
除了现场盯盘,很多团队还需要把临时排查方法沉淀成持续可用的工具链。围绕 cpustat,常见做法有三类:统一视图、数据落盘、脚本化采集。
dstat 适合快速总览
dstat 能同时显示 CPU、内存、网络和磁盘使用情况,并支持插件扩展。它的优势不是替代 cpustat,而是在快速诊断场景里提供一个更集中的观察面。
如果你正在处理一台突然变慢的 CentOS 主机,先用 cpustat 确认 CPU 表现,再用 dstat 把相关资源放到同一屏幕上,通常能更快看出问题到底偏向 CPU、磁盘还是网络侧。这种“一站式”视图对于初筛非常高效。
把 cpustat 输出写入日志,做事后分析
很多异常不会在人工盯屏时出现,因此把数据持久化下来很有必要。最直接的方法,是将 cpustat 的输出重定向到日志文件,再用 grep、awk、sed 等文本工具做筛选和整理。
如果环境更完整,也可以把这些数据接入 ELK Stack 一类日志分析平台,用于模式识别和趋势分析。这样做的好处是,排障不再依赖某一次现场抓取,而是可以回看历史、对比时间段,并从多次事件里找共性。
用 Shell 脚本做定时采集
当某些排查动作已经反复出现,就适合把它们脚本化。可以编写一个简单的 Shell 脚本,定时采集 cpustat 和其他工具的输出,格式化后发送到监控系统,或者直接存入数据库。
这样做的意义,不只是减少手工操作,更是把零散命令升级为稳定的监控流程。对于频繁处理性能问题的运维团队,这通常比单次排查更有长期价值。
实际使用时要注意什么
把这些工具组合起来用时,有两个原则不能忽略。第一是权限,有些性能数据需要 root 权限才能访问,如果权限不够,看到的信息可能不完整。第二是不要孤立解读数字,同样的 CPU 使用率,在不同业务负载和系统上下文里含义完全不同。
换句话说,cpustat 适合做入口,不适合独立下结论。真正可靠的 CentOS 性能分析,应该是用 cpustat 发现异常,再结合 top、vmstat、iostat、sar、perf、dstat 以及日志和脚本逐步核实。只有把“当前现象”和“系统上下文”放在一起看,结论才不容易误判。











