Sysstat 工具集速查表:sar, mpstat, iostat, pidstat, sadf

1. 为什么要用 sysstat?

sysstat 是 Linux 上老牌的性能监控工具包,包含了 sarmpstatiostatpidstatsadf 等。它们轻量、无外部依赖,非常适合嵌入式 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 内核态,%iowait I/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 交付报告