Sysstat 工具集速查表:sar, mpstat, iostat, pidstat, sadf
1. 为什么要用 sysstat?
sysstat 是 Linux 上老牌的性能监控工具包,包含了 sar、mpstat、iostat、pidstat、sadf 等。它们轻量、无外部依赖,非常适合嵌入式 ARM64 平台(如 Bsta1000)的现场调试和长期监控。
核心思想:先宏观,再微观;先整体,再局部。
- 宏观:
sar/mpstat/iostat把握系统级指标 - 微观:
pidstat定位进程/线程 - 导出:
sadf把历史数据变成 CSV/JSON 报告
2. 速查表总览
| 工具 | 主要用途 | 关键选项 |
|---|---|---|
sar |
系统活动历史回溯(CPU/内存/IO/网络) | -u (CPU), -r (内存), -b (IO), -n DEV (网络), -f (读历史文件) |
mpstat |
每个 CPU 核心的详细使用率 | -P ALL (所有核), -P 0,2 (指定核) |
iostat |
块设备和分区 I/O 性能 | -x (扩展统计), -p <设备> (指定设备), -d |
pidstat |
进程/线程的 CPU、内存、I/O 占用 | -r (内存), -d (I/O), -t (线程), -p <PID> |
sadf |
将 sar 二进制数据导出为多种格式 | -d (CSV), -j (JSON), -x (XML) |
3. 常用命令集合
3.1 sar – 系统活动记录仪
实时采样
# CPU 使用率,每秒1次,共5次
sar -u 1 5
# 内存 (空闲、已用、缓存等)
sar -r 1 5
# 磁盘 I/O 传输速率 (tps, rtps, wtps, bread/s, bwrtn/s)
sar -b 1 5
# 网络接口流量 (rxkB/s, txkB/s)
sar -n DEV 1 5
历史数据回溯
# 查看当天的历史数据 (需事先配置数据采集)
sar -u -f /var/log/sa/sa$(date +%d)
# 查看某日特定时段 (例如 10:00:00 到 11:00:00)
sar -u -f /var/log/sa/sa11 -s 10:00:00 -e 11:00:00
3.2 mpstat – 多核 CPU 分析器
# 所有核每秒刷新,共 5 次
mpstat -P ALL 1 5
# 只看 cpu0 和 cpu2
mpstat -P 0,2 1 5
关注指标:
%usr用户态,%sys内核态,%iowaitI/O 等待%irq硬中断,%soft软中断 – 可用于定位中断风暴
3.3 iostat – 存储设备脉搏
# 扩展统计,每秒刷新,共 5 次
iostat -x 1 5
# 只监控 mmcblk0 (eMMC)
iostat -x -p mmcblk0 1 5
关键列解读:
await– 平均 I/O 响应时间 (>20ms 需关注)%util– 磁盘繁忙度 (>90% 意味饱和)r/s,w/s,rkB/s,wkB/s– 读写并发与吞吐
3.4 pidstat – 进程资源显微镜
# 每 2 秒打印所有进程的 CPU 占用
pidstat 2
# 查看进程内存 (RSS, %MEM)
pidstat -r -p <PID> 2 10
# 查看进程引发的 I/O (kB_rd/s, kB_wr/s)
pidstat -d -p <PID> 2 10
# 显示线程级统计
pidstat -t -p <PID> 1 5
内存泄漏排查:持续监控 RSS 是否单调上升而不回落。
3.5 sadf – 数据导出器
# 将当日的 CPU 历史记录导出为 CSV
sadf -d /var/log/sa/sa$(date +%d) -- -u > cpu.csv
# 导出为 JSON 用于 API 或可视化
sadf -j /var/log/sa/sa11 -- -r -b > mem_io.json
# 导出 XML (可读性好)
sadf -x /var/log/sa/sa11 -- -n DEV > net.xml
4. 典型排查路径
CPU 使用率高 → 定位进程 → 分析线程
mpstat -P ALL 1 5 # 看哪个核忙
pidstat 1 5 # 找占用高的进程
pidstat -t -p <PID> 1 5 # 进一步到线程
内存疑似泄漏 → 长期监控 RSS
pidstat -r -p <PID> 10 360 > mem.log # 监控1小时
# 事后分析 mem.log 中的 RSS 趋势
磁盘 I/O 慢 → 定位设备 → 找肇事进程
iostat -x 1 5 # 看哪块盘 await 高或 util 接近 100%
pidstat -d 1 5 # 哪个进程在疯狂读写
网络异常 → 流量与软中断
sar -n DEV 1 5 # 网络接口流量
mpstat -P ALL 1 5 # 查看 %soft 分布,判断中断亲和性
5. 生产环境实践要点
- 开启 sar 历史采集:在
/etc/cron.d/sysstat或手动启动 sar 后台采集,保留一周左右数据,便于回溯偶发问题。 - 静态编译部署:对于裁剪的嵌入式系统,交叉编译 sysstat 时使用
-static选项,消除库依赖,直接拷贝到/userdata/sysstat/bin即可运行。 - 非侵入执行:所有命令均只需读取
/proc和/sys,无需安装内核模块,安全可靠。
6. 总结
这是一个「无侵入、零依赖」的工具集。无论你是在调试客户现场的 ARM 设备,还是在云端分析性能瓶颈,熟练掌握这五个命令,就能用极低成本绘制出系统的资源使用全景图。
记住这个心法:
- sar 回到过去
- mpstat / iostat 看清现在
- pidstat 锁定真凶
- sadf 交付报告