sar
(System Activity Report)是 Linux 性能分析中非常强大的命令之一,主要用于收集、显示和记录系统运行状态的数据。适用于日常性能监控、排查系统瓶颈、分析历史趋势、计划容量升级等多种场景。
🔧 一、sar 工作原理概览
sar
命令是 sysstat
套件中的一部分,它从 /proc
文件系统中采集数据,并以报告形式输出。
- 实时监控:如
sar -u 1 5
表示每秒采样一次,连续5次 - 历史分析:如
sar -u -f /var/log/sysstat/saXX
分析历史数据文件(默认保存7-28天)
默认数据文件路径:
/var/log/sysstat/saDD
(DD 为日期,如sa24
表示 24 日)
📚 二、sar 命令详细语法
sar [选项] [间隔 秒数] [次数]
🛠️ 三、常见使用场景
✅ 1. 查看 CPU 使用情况(用户/系统/等待/空闲)
sar -u 1 5
含义:每隔 1 秒查看一次 CPU 使用情况,共查看 5 次。
输出字段说明:
%user
:用户空间使用 CPU 百分比(高时检查应用 CPU 消耗)%system
:内核空间使用百分比(高时检查内核或驱动)%iowait
:等待 I/O 百分比(高时检查磁盘/网络瓶颈)%idle
:CPU 空闲百分比(低可能表示负载高)
📌 常用于:定位高 CPU 使用率、判断是否为 I/O 等待导致性能瓶颈。
✅ 2:历史 CPU 使用回溯(分析某时段)
sar -u -f /var/log/sysstat/sa23 -s 09:00:00 -e 11:30:00
- 从当天凌晨
sa23
文件中,提取 09:00–11:30 的 CPU 报告。 - 可用于回顾某次报警时段的负载情况,配合监控告警时间点对齐。
✅ 3:内存与缓存使用分析
sar -r 60 3
- 每 60 秒采样一次,连续 3 次。
- 输出字段:
kbmemfree
/kbmemused
:空闲/已用内存%memused
:内存使用率kbbuffers
/kbcached
:缓冲区 & 缓存大小
- 诊断点:
%memused
持续上升 → 检查内存泄漏或缓存占满kbcached
很低 → 应用可能频繁读写磁盘
📌 常用于:判断系统是否内存不足、缓存是否释放、是否触发了 Swap。
✅ 4. 查看交换空间(swap)使用情况
sar -S 30 4
- 每 30 秒测一次,共 4 次;检查系统是否进入 swap。
- 关键字段:
kbswpfree
:可用 swap 空间kbswpused
:已用 swap 空间%swpused
:swap 使用率pswpin/s
/pswpout/s
:每秒 swap in/out 页数- 诊断点:高
pswpin/s
→ 物理内存不足,可能引起 I/O 瓶颈
📌 常用于:分析是否存在内存换页,是否 swap 频繁影响性能。
✅ 5. 磁盘 I/O 统计
sar -d -p 5 6
-p
保持输出顺序固定,每 5 秒采集,总 6 次。- 输出示例字段:
DEV
: 设备名tps
: 每秒传输请求数rd_sec/s
/wr_sec/s
: 每秒读写扇区数
- 诊断点:
- 某设备
tps
/wr_sec/s
/rd_sec/s
突增 → 定位到具体磁盘 - 配合
iostat -x
可进一步查看响应时间
- 某设备
📌 常用于:定位磁盘压力过大,例如 iowait
高时,用于判断是否磁盘成为瓶颈。
✅ 6. 网络流量监控
sar -n DEV 10 3
- 每 10 秒采样,3 次;查看所有网卡。
- 字段说明(针对每个设备如
eth0
,ens33
):rxpck/s
/txpck/s
:包速率rxkB/s
/txkB/s
:吞吐速率(KB/s)
- 可加
-n EDEV
监控错误包、丢包率:sar -n EDEV 10 3
📌 常用于:查看网卡是否存在大流量,判断丢包、拥塞可能性。
✅ 7. 查看负载情况(Load Average)
sar -q 300 2
- 每 300 秒(5 分钟)采集一次,2 次;与 load average 同周期。
- 字段说明:
runq-sz
:运行队列长度(大于 CPU 核心数说明排队)ldavg-1/5/15
:1/5/15 分钟负载均值blocked
:等待 I/O 的进程数
📌 常用于:系统负载是否过高,是否长时间积压任务。
✅ 8. 查看文件系统活动(比如读写文件频率)
sar -v 1 3
字段包括 dentunusd
, file-nr
, inode-nr
等,用于系统文件句柄、inode 使用监控。
✅ 9. 查看历史某天数据(如 24 号 CPU 使用情况)
sar -u -f /var/log/sysstat/sa24
或查看某个小时段:
sar -u -s 14:00:00 -e 15:00:00 -f /var/log/sysstat/sa24
📌 常用于:分析服务器异常发生的历史时间点,比如前天 3 点系统负载异常等。
✅ 10:多核 CPU 分别监控
sar -P ALL 1 4
- 查看各个核的
%user
/%system
/%idle
,每秒采集 4 次。 - 用于排查负载是否均衡,或某个核被频繁“绑死”。
🧠 四、进阶组合应用示例
1️⃣ 定位系统卡顿时段 CPU 高的原因
sar -u -s 03:00:00 -e 05:00:00 -f /var/log/sysstat/sa24
2️⃣ 查看当天网卡带宽是否超出预期
sar -n DEV -f /var/log/sysstat/sa$(date +%d)
3️⃣ 结合 cron 每小时记录一次 CPU 数据到文件
在 /etc/cron.d/sysstat
中调整如下:
*/5 * * * * root /usr/lib64/sa/sa1 1 1
🧩 五、与其他工具组合建议
工具 | 用途 |
---|---|
iostat | 磁盘 I/O 分析 |
vmstat | 内存、进程、CPU 等简报 |
iotop | 哪些进程在高 I/O |
atop | 综合实时监控 |
perf , bpftrace | 内核级诊断 |
✅ 六、总结:sar
使用时的常见实践
选项 | 含义 |
---|---|
-u | CPU 使用(user、system、iowait、idle 等) |
-r | 内存使用(free、used、buffer、cache) |
-S | 交换分区使用(swap) |
-d | 块设备 I/O(tps、rd_sec/s、wr_sec/s) |
-b | I/O 传输速率 |
-n DEV | 网络接口吞吐(rx/tx 包及字节) |
-q | 系统负载及进程队列长度 |
-w | 任务切换及上下文切换次数 |
-v | 内核表(inode、file、tty、sock 等) |
-f <file> | 指定历史文件,如 /var/log/sysstat/sa22 |
-s /-e | 起始时间/结束时间(HH:MM:SS) |
-P ALL | 各个 CPU 核心分别报告 |
✅七、综合排查流程举例
- 快速定位
sar -u 1 3
观察 CPU,sar -q 1 3
观察队列。
- 锁定子系统
- CPU 高 →
sar -P ALL
- I/O 高 →
sar -d
&sar -b
- 内存高 →
sar -r
&sar -S
- 网络高 →
sar -n DEV
&sar -n EDEV
- CPU 高 →
- 回溯历史
- 指定
-f saXX
并用-s
/-e
筛选时段。
- 指定
- 深入分析
- 配合
iostat
、vmstat
、top
、htop
、iotop
等工具,精准定位进程或操作。
- 配合