sar 命令通过读取 sysstat 服务采集的二进制日志文件查看历史性能,默认需手动启用数据收集功能,数据通常存储在/var/log/sysstat/或/var/log/sa/目录下。若未提前配置 sysstat 服务,sar 无法回溯任何历史数据。
先说结论:sar 本身只是报告工具,必须依赖 sysstat 服务后台运行并保存日志才能查看历史数据。
- 适合:需要回溯过去某天 CPU、内存、磁盘或网络负载的场景
- 先看:
/var/log/sysstat/目录下是否有对应日期的 saXX 文件 - 建议:先确认 ENABLED="true" 再等待至少一个采集周期
命令速用版
# 查看指定日期的 CPU 使用率(例如 12 号)
sar -u -f /var/log/sysstat/sa12
# 查看指定日期的内存使用情况
sar -r -f /var/log/sysstat/sa12
# 查看指定日期的磁盘 IO 统计
sar -b -f /var/log/sysstat/sa12
# 查看指定日期的网卡流量
sar -n DEV -f /var/log/sysstat/sa12
# 查看指定时间段的数据(例如 9 点到 10 点半)
sar -u -f /var/log/sysstat/sa12 09:00:00 10:30:00为什么会这样
sar 依赖 sysstat 包中的 sadc 数据采集器和 cron 定时任务,默认安装后往往未开启自动收集,导致日志目录为空。系统通过/etc/cron.d/sysstat每 10 分钟运行一次采集脚本,将原始数据写入二进制文件,sar 命令仅负责读取这些已归档的文件。
分步处理
步骤 1:确认 sysstat 已安装并启用
适用场景:新服务器或从未配置过历史监控的环境。
操作动作:检查配置文件/etc/default/sysstat(Debian/Ubuntu)或/etc/sysconfig/sysstat(RHEL/CentOS),确保ENABLED="true"。
验证结果:执行systemctl is-active sysstat显示 active。
风险边界:修改配置后需重启服务或等待下一个 cron 周期生效。
步骤 2:确认日志文件存在
适用场景:准备读取历史数据前。
操作动作:执行ls -l /var/log/sysstat/或ls -l /var/log/sa/。
验证结果:看到名为saXX的文件(XX 为日期,如 sa15 表示 15 号)。
风险边界:文件名为两位日期,不足补零,如 5 号为 sa05,不是 sa5。
步骤 3:使用 -f 参数读取数据
适用场景:查看特定日期的性能指标。
操作动作:执行sar -u -f /var/log/sysstat/sa15。
验证结果:屏幕输出包含时间戳和%user、%system、%idle 等列。
风险边界:必须使用绝对路径,且文件必须是二进制格式,不能用 cat 直接查看。
怎么验证是否生效
执行ls -lt /var/log/sysstat/查看最新文件修改时间,确认是否有当天或昨天的saXX文件。若文件存在,运行sar -u -f /var/log/sysstat/saXX能输出具体数据而非报错,即表示采集正常。若提示Cannot open ... No such file or directory,说明 cron 任务未运行或配置未生效。
常见坑
路径错误:部分发行版数据存放在/var/log/sa/而非/var/log/sysstat/,需先用ls确认实际路径。
文件名格式:文件名是sa12而不是sa012或sa202412,sysstat 不存储年份和月份信息。
权限不足:非 root 用户可能无法读取/var/log/sysstat/目录,导致输出为空且无报错。
时间对齐:历史数据默认每 10 分钟采集一次,查询时间范围需对齐采集粒度,如09:00:00而非09:03:22。
常见问题
为什么 sar -f 报错找不到文件?
大概率是 sysstat 服务未启用或 cron 任务未运行,导致没有生成二进制日志文件。
CPU 使用率各项加起来为什么不等于 100%?
因为 sar -u 默认显示的是各 CPU 核心的平均值,且%user、%system 等字段是按采样周期内各自占用时间比例计算的,它们可以同时发生。
如何查看特定网卡的历史流量?
使用sar -n DEV -f /var/log/sysstat/saXX,注意历史记录中的接口名可能与当前ip link看到的不一致,需核对采集时刻的设备名。
参考来源
- Linux sar 命令监控系统历史性能
- Linux 怎么使用 sar 命令_Linux 如何查看历史性能数据【技巧】
- Linux 怎么使用 Sar 查看历史网卡流量
- 【linux】sar 查看历史 io/cpu 负荷
- Linux 怎么使用 sar 命令查看历史负载记录
- Linux 如何使用 sar 收集系统性能数据_Linux sar 收集系统性能数据攻略
- 如何在 Linux 中安装并使用 Sar 工具 Linux 查看历史系统性能的方法
- Linux sar 命令
- SAR 命令
- linux sar 命令详解 (历史资源查看,如内存、CUP 等等) - 邱明成 - 博客园