要实现Linux内存与交换分区长期趋势监控,需启用sysstat服务自动每10分钟采集数据并归档至/var/log/sysstat/,再用sar -f读取历史文件(如sa23)配合时间筛选(-s/-e)查看内存(-r)和交换(-W)指标,支持导出CSV用于绘图分析,并可配置高频快照与基线告警。

要实现 Linux 系统中内存与交换分区的长期趋势监控,关键不是靠实时命令“跑一次”,而是让 sar 持续采集、自动归档、可回溯查询。它本身不提供图形化界面,但配合系统级数据收集机制,就能做到按天/周/月看内存使用走势。
启用 sysstat 的后台数据收集服务
默认安装的 sar 不会自动记录历史数据——必须开启 sysstat 的定时采集服务:
- 确认服务已安装并启用:
sudo systemctl enable --now sysstat - 该服务每 10 分钟调用
sadc(system activity data collector)采集一次全维度指标,包括内存(-r)、交换活动(-W、-B)等 - 原始数据以二进制格式保存在
/var/log/sysstat/下,文件名如sa24(表示当月 24 日),默认保留 28 天(可通过修改/etc/sysconfig/sysstat中的HISTORY=调整)
查看历史内存与交换趋势
用 sar -f 读取指定日期的归档数据,再结合时间范围筛选:
- 查某天全部内存使用(含空闲、缓存、提交内存):
sar -r -f /var/log/sysstat/sa23(查 23 日) - 查某天 swap 页面交换频率:
sar -W -f /var/log/sysstat/sa23(看pswpin/s和pswpout/s) - 叠加时间窗口:加
-s和-e参数限定起止时刻,例如只看早 8 点到晚 6 点:sar -r -s 08:00:00 -e 18:00:00 -f /var/log/sysstat/sa23
导出结构化数据用于趋势分析
原始输出是文本表格,不利于绘图或比对。建议导出为 CSV 格式后导入 Excel 或 Grafana:
- 提取内存字段(时间、已用内存 KB、空闲内存 KB、缓存 KB):
sar -r -f /var/log/sysstat/sa23 | awk '/^[0-9]/ {print $1","$2","$3","$4","$5}' > mem_23.csv - 提取 swap 活动(时间、入页/出页次数):
sar -W -f /var/log/sysstat/sa23 | awk '/^[0-9]/ {print $1","$2","$3}' > swap_23.csv - 注意:首行是表头,需手动补上;也可用
sed过滤掉非数据行
补充建议:设置定期快照与告警基线
仅靠默认 10 分钟粒度可能错过短时峰值。可额外配置高频采样任务:
- 写一个 cron 任务,每 2 分钟记录一次内存快照:
*/2 * * * * /usr/bin/sar -r 1 1 >> /var/log/sar_mem_minutely.log 2>&1 - 用脚本统计每日
%memused最高值、pgmajfault/s异常突增、或pswpin/s > 10持续超 5 分钟——这些就是内存压力的典型信号 - 把历史
kbmemfree最低值设为基线,当实时sar -r 1 1显示该值低于基线 15%,就触发邮件提醒


















