sar默认统计系统整体内存占用率,数据存于/var/log/sa/下,需确保sysstat服务启用并运行,通过sar -r -f指定日期文件可查看历史内存使用情况,并支持计算平均值与峰值。

sar 默认就能统计历史内存占用率,不需要额外开启进程级采集——它记录的是系统整体内存使用情况,包括物理内存和交换空间(swap),数据自动保存在 /var/log/sa/ 目录下,按日期命名(如 sa29 表示本月29日)。
关键点是:确认 sysstat 服务已启用并持续运行,否则 /var/log/sa/ 下不会有历史文件。
✅ 确认历史内存数据是否可用
运行以下命令检查今天是否有内存记录:
sar -r -f /var/log/sa/sa$(date +%d) | head -5
如果看到类似输出(含 kbmemfree、kbmemused、%memused、kbbuffers、kbcached 等字段),说明内存历史数据正常采集:
Linux 5.10.0-28-amd64 (host) 07/29/2026 _x86_64_ (4 CPU) 12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 12:10:01 AM 1234567 7890123 85.23 123456 3456789 4567890 42.1 567890 234567 12 ...
若提示 Cannot open /var/log/sa/sa29: No such file or directory,说明 sysstat 未启用或未运行,请先执行:
sudo systemctl enable --now sysstat
Debian/Ubuntu 还需确保 /etc/default/sysstat 中 ENABLED="true";RHEL/CentOS 检查 /etc/sysconfig/sysstat 中 ENABLED="true"。
? 查看指定日期的内存历史占用率
-
查看今天(默认)的内存使用趋势:
sar -r
-
查看昨天的内存使用情况:
sar -r -f /var/log/sa/sa$(date -d 'yesterday' +%d)
-
查看某天(如7月25日)的内存占用率:
sar -r -f /var/log/sa/sa25
⚠️ 注意:
saDD文件名中的DD是两位数字日期(如sa07表示7号,sa25表示25号),不是月份。
? 提取关键指标:平均内存占用率 & 峰值
-
计算当天平均内存使用百分比(%memused):
sar -r -f /var/log/sa/sa$(date +%d) | awk '$4 ~ /^[0-9]+\.?[0-9]*$/ {sum += $4; n++} END {printf "Avg memory usage: %.2f%%\n", sum/n}' -
找出当天内存使用率最高的时刻:
sar -r -f /var/log/sa/sa$(date +%d) | awk '$4 ~ /^[0-9]+\.?[0-9]*$/ {print $1, $2, $4}' | sort -k3nr | head -3
输出示例:
03:40:01 PM 89.72 03:50:01 PM 88.95 03:30:01 PM 87.61
? 数据存储与保留周期
- 日志路径:
/var/log/sa/saXX(二进制格式,不可直接 cat) - 保留天数由
/etc/sysconfig/sysstat(RHEL)或/etc/default/sysstat(Debian)中HISTORY=参数控制,默认通常是 7 天,最大可设为 28 天以上。 - 如需延长保留期,修改该值后重启服务:
sudo systemctl restart sysstat
不复杂但容易忽略。


















