查不到昨天cpu数据是因为sysstat服务未运行、日志文件缺失或cron未配置采集;需验证服务状态、检查saxx文件存在性、确认cron任务启用;sar -f必须置于选项最前才能读取历史数据。

Linux的sar命令默认不保存历史数据
直接运行 sar 查不到“昨天某时刻”的数据,因为它的默认行为只显示当前正在采集的实时统计(如 sar 1 5),或读取当前会话中已缓存的内存数据。真正能查历史的关键,是系统是否启用了 sysstat 的日志轮转机制——它会把每10分钟的采样结果写入 /var/log/sa/saXX 文件(XX 是日期,如 sa05 表示 5 号)。
所以第一步永远是确认:你的机器有没有在后台持续采集?
- 检查服务状态:
systemctl is-active sysstat,应返回active - 确认日志目录存在且有文件:
ls -l /var/log/sa/sa$(date -d yesterday +%d) - 如果返回 “No such file”,说明昨天没采集,
sar就无从查起
查昨天某时刻CPU负载的正确命令格式
假设你想查昨天下午 14:23 的 CPU 使用率,且已确认 /var/log/sa/sa05 存在(今天是6号),那就用 sar 显式指定日志文件 + 时间范围:
sar -f /var/log/sa/sa05 -s 14:23:00 -e 14:24:00 -u
这里几个参数不能错:
-
-f指定日志路径,必须写全,/var/log/sa/saXX是唯一合法来源 -
-s和-e是起止时间,格式严格为HH:MM:SS,不支持 “14:23” 这种缺秒写法(否则会匹配全天) -
-u表示 CPU 统计;想看 iowait 单独加%iowait列,需配合-P ALL才能看到各核细分 - 注意:sar 日志默认每10分钟一条记录,所以
-s 14:23:00 -e 14:24:00实际只会输出最接近的那个10分钟点(比如 14:20 或 14:30),无法精确到秒级
常见错误:为什么总是显示“Requested activities not available in file”
这个错误不是路径错了,而是日志文件里压根没存你要的指标类型。sar 日志按活动类型分文件存储,但默认配置通常只启用基础项。你运行 sar -f /var/log/sa/sa05 -u 报错,可能因为:
- sysstat 配置禁用了 CPU 采集:检查
/etc/sysconfig/sysstat(RHEL/CentOS)或/etc/default/sysstat(Debian/Ubuntu),确认ENABLED="true"且没注释掉SA1_OPTIONS - 日志文件被截断或损坏:用
file /var/log/sa/sa05看是否为 “sysstat data file”,不是则说明采集失败 - 误用了实时模式参数:比如在
-f场景下还加了1 5(即sar -f ... -u 1 5),这会让 sar 混淆成“边读日志边实时采”,直接报错
没有历史日志时的临时补救办法
如果确认昨天没开采集,又急需某个时刻的负载参考,只能退而求其次找间接线索:
- 查进程历史:若当时有高负载进程在跑,且开启了
auditd或systemd-journald记录,可试journalctl --since "yesterday 14:20" --until "yesterday 14:30" | grep -i "high cpu\|kswapd\|oom" - 看负载平均值残留:
cat /proc/loadavg是瞬时值,但部分监控代理(如 collectd、telegraf)若已部署,其本地存储可能保留了更细粒度数据 - 下次记得提前配好:
echo '*/10 * * * * root /usr/lib64/sysstat/sa1 1 1' > /etc/cron.d/sysstat(路径依发行版可能为/usr/lib/sysstat/sa1)
真正的“昨天某时刻”只存在于当天生成的日志文件里,错过就不可逆——这点比任何参数细节都关键。











