sar是linux中用于历史性能回溯的监控工具,需启用sysstat服务并配置cron定时采集,数据存于/var/log/sysstat/,支持按日期、时间范围查看cpu、内存、i/o等指标。

sar(System Activity Reporter)是 Linux 系统中一个老牌且功能强大的性能监控工具,它能收集、报告和保存系统的 CPU、内存、磁盘 I/O、网络、进程等历史性能数据。与 top 或 htop 这类实时工具不同,sar 的核心价值在于“历史回溯”——只要数据被采集过,就能随时查看过去任意时段的系统状态。
如何启用并保存历史 sar 数据
默认情况下,许多发行版(如 CentOS/RHEL、Ubuntu)已预装 sysstat 包(sar 就是其中一部分),但历史数据采集通常需要手动开启:
- 确保
sysstat已安装:sudo apt install sysstat(Debian/Ubuntu)或sudo yum install sysstat(RHEL/CentOS) - 编辑配置文件
/etc/default/sysstat(Debian/Ubuntu)或/etc/sysconfig/sysstat(RHEL/CentOS),将ENABLED="false"改为ENABLED="true" - 确认 cron 任务已启用:系统会通过
/etc/cron.d/sysstat每 10 分钟运行一次sadf -F -- -A,把原始数据写入/var/log/sysstat/saXX(XX 为日期,如 sa15 表示 15 号) - 首次启用后,需等待至少一个采集周期(默认 10 分钟)才能生成首份数据
常用 sar 命令查看历史性能
所有历史数据都存放在 /var/log/sysstat/ 下,用 sar 加选项和日期参数即可读取:
-
sar -u -f /var/log/sysstat/sa12:查看 12 日的 CPU 使用率(%user、%system、%iowait 等) -
sar -r -f /var/log/sysstat/sa12:查看当日内存使用情况(%memused、kbmemfree、kbbuffers 等) -
sar -b -f /var/log/sysstat/sa12:查看磁盘整体 I/O 统计(tps、rd_sec/s、wr_sec/s) -
sar -n DEV -f /var/log/sysstat/sa12:查看网卡流量(eth0、ens33 等接口的 rxkB/s、txkB/s) -
sar -q -f /var/log/sysstat/sa12:查看系统平均负载(load average)和运行队列长度
也可指定时间范围,例如:sar -u -f /var/log/sysstat/sa12 09:00:00 10:30:00 查看上午 9 点到 10 点半的 CPU 曲线。
理解关键指标含义
看懂输出比记住命令更重要。几个高频指标的实际意义:
- %iowait:CPU 等待 I/O 完成的时间占比。持续高于 5%–10%,说明磁盘可能成为瓶颈(注意:在虚拟化或 NVMe 场景下需结合实际 I/O 延迟判断)
-
%idle:CPU 空闲时间。若长期接近 0%,说明 CPU 资源紧张;但单次突降不意味故障,需结合运行队列(
runq-sz)和上下文切换(cs)综合判断 - pgpgin/pgpgout:每秒换入/换出的页数(单位:KB)。数值高不一定异常,但若伴随高 %iowait 和低吞吐量,可能是内存不足触发频繁 swap
- rkB/s + wkB/s:磁盘读写带宽总和。对比磁盘理论上限(如 SATA III 约 600MB/s,NVMe 可达 3GB/s+)可评估是否饱和
补充技巧与注意事项
让 sar 更好用的几条实用建议:
- 日志默认只保留 7 天(由
/etc/cron.d/sysstat中的sa1脚本控制),如需长期归档,可修改/etc/sysconfig/sysstat中的HISTORY=28(保留 28 天) - 用
sadf -d /var/log/sysstat/sa12可将二进制数据转为 CSV 格式,方便导入 Excel 或 Grafana 分析 -
sar默认采样间隔为 10 分钟,如需更高精度(如排查短时毛刺),可临时运行sar -u 1 60(每秒采样 1 次,共 60 次),但不写入历史日志 - 某些容器环境或精简系统可能未启用 sysstat 服务,需手动启动:
sudo systemctl enable sysstat && sudo systemctl start sysstat











