Linux sar 命令监控系统历史性能

7次阅读

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

Linux sar 命令监控系统历史性能

sar(System Activity Reporter)是 Linux 系统中一个老牌且功能强大的性能监控工具,它能收集、报告和保存系统的 CPU、内存、磁盘 I/O、网络、进程等历史性能数据。与 tophtop 这类实时工具不同,sar 的核心价值在于“历史回溯”——只要数据被采集过,就能随时查看过去任意时段的系统状态。

如何启用并保存历史 sar 数据

默认情况下,许多发行版(如 centos/RHEL、ubuntu)已预装 sysstat 包(sar 就是其中一部分),但历史数据采集通常需要手动开启:

  • 确保 sysstat 已安装:sudo apt install sysstatdebian/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 格式,方便导入 excelgrafana 分析
  • sar 默认采样间隔为 10 分钟,如需更高精度(如排查短时毛刺),可临时运行 sar -u 1 60(每秒采样 1 次,共 60 次),但不写入历史日志
  • 某些容器环境或精简系统可能未启用 sysstat 服务,需手动启动:sudo systemctl enable sysstat && sudo systemctl start sysstat
text=ZqhQzanResources