Debian 中 cpustat 与其他性能工具的对比
工具版本与定位
- 在 Debian 上,常见的 cpustat 来自 sysstat 软件包,侧重展示系统级 CPU 利用率、上下文切换、中断 等统计,输出以表格为主,便于脚本化与自动化分析。
- 另一个同名工具是 Uber 的 cpustat(Go 实现),通过 netlink taskstats 接口采样进程,默认高频采样(如每 200ms)并做汇总(如每 2s),可显示进程的 runq/iow/swap 等更细指标,通常需 root 运行。
- 若未特别说明,下文对比以 sysstat 的 cpustat 为主,并在涉及进程级细粒度指标时补充 Uber cpustat 的差异。
横向对比一览
| 工具 |
定位与覆盖 |
实时与交互 |
数据输出与历史 |
开销与权限 |
典型场景 |
| cpustat(sysstat) |
系统级 CPU 统计(含每核、上下文切换、中断等) |
非交互式为主,可设间隔循环输出 |
文本表格,易重定向,适合脚本 |
轻量,常规权限 |
服务器巡检、轻量监控、嵌入式 |
| top |
进程级资源总览(CPU/内存/IO 等) |
全屏交互、可排序/杀进程 |
仅当前快照,不便于长期留存 |
轻量,常规权限 |
快速定位异常进程 |
| htop |
增强版 top,界面与操作更友好 |
全屏交互、按键筛选 |
仅当前快照 |
轻量,常规权限 |
日常运维与交互式排障 |
| sar(sysstat) |
多类系统指标的历史与实时 |
非交互式 |
可写入/回放历史文件,支持 CSV |
轻量,常规权限 |
容量规划、回溯分析 |
| dstat |
CPU/内存/磁盘/网络并发对比 |
终端动态刷新 |
可导出 CSV |
轻量,常规权限 |
关联型瓶颈初筛 |
| atop |
进程级全栈(含磁盘/网络),可日志化 |
全屏交互 |
可生成每日日志,过载高亮 |
轻量,常规权限 |
带历史的责任归因 |
| Nmon |
终端仪表盘 + 捕捉模式 |
交互式与捕捉模式 |
捕捉为 CSV 便于绘图 |
轻量,常规权限 |
可视化趋势与报表 |
| Uber cpustat(Go) |
进程级细粒度(runq/iow/swap、min/avg/max) |
滚动面板/列表 |
文本输出 |
采样更细,通常需 root |
短时高峰剖析、细粒度瓶颈定位 |
| LTTng |
内核/用户态事件追踪 |
离线/低开销追踪 |
事件序列,需解析 |
相对更高开销,需配置 |
内核路径、调度/IO 深度分析 |
如何选择
- 只关心系统级 CPU 利用率与负载特征,且要低开销、易脚本化:优先用 cpustat(sysstat)。
- 需要交互式筛选、按 CPU/内存排序并快速处置进程:用 top/htop。
- 需要跨资源(CPU/内存/磁盘/网络)的并发对比视图:用 dstat。
- 需要历史回溯与报表(含多类指标):用 sar(sysstat);若强调进程级历史与责任归因:用 atop。
- 需要终端仪表盘并导出 CSV 做趋势图:用 Nmon。
- 需要进程级更细的饱和度指标(如 runq/iow/swap)或短时高峰剖析:用 Uber cpustat(Go)(注意通常需 root)。
- 需要深入到内核事件/调用路径的因果分析:用 LTTng 这类追踪框架。
快速上手示例
- 系统级 CPU 快照与每核统计
- 安装:sudo apt-get install sysstat
- 使用:cpustat;cpustat -c
- 交互式进程排查
- 历史与报表
- 实时:sar -u 1 10
- 回放:sar -u -f /var/log/sa/sa05
- 多资源并发对比
- 终端仪表盘与 CSV 捕捉
- 进程级细粒度(Uber cpustat)
- 安装 Go 后:go get github.com/uber-common/cpustat
- 使用:sudo $GOPATH/bin/cpustat(默认 200ms 采样、2s 汇总)
注意事项
- 同名不同源:sysstat 的 cpustat 与 Uber 的 cpustat 功能定位、输出与权限要求不同,安装与调用前请确认版本与来源。
- 权限差异:部分工具(如 Uber cpustat)需要 root 才能获取完整的 taskstats 信息;LTTng 等追踪框架也需相应权限与配置。
- 历史数据:若未启用 sysstat 的数据收集(如 sa1/sadc),sar 的历史回放将受限;建议在生产环境按需开启并按需轮转保存。