Linux怎么使用sar命令排查历史上发生的内存耗尽

大涛小哥_7390

大涛小哥_7390

2026-11-09

234人浏览

原创

查内存历史需用sar -r -f /var/log/sa/saXX,重点看kbmemavail和%memused;先确认sysstat服务active且saXX文件存在,否则无历史数据可查。

linux怎么使用sar命令排查历史上发生的内存耗尽

直接查 /var/log/sa/saXX 文件,用 sar -r -f 提取内存历史,重点盯 available 和 %memused 两个字段——不是 used,也不是 free。

确认 sysstat 是否已启用历史采集

没开数据收集,sar 就是空壳子,查不到任何历史。先验证:

  • ls -l /var/log/sa/sa$(date -d yesterday +%d) —— 看昨天的 sa 文件是否存在;如果报 “No such file”,大概率没启用自动采集
  • systemctl is-active sysstat 返回 active 才算真正运行中;若为 inactive,需执行 sudo systemctl enable --now sysstat
  • 默认采集间隔是 10 分钟,所以历史粒度最多到 10 分钟级,别指望看到某分钟内秒级波动

用 sar -r 查内存历史,关键字段别看错

sar -r 输出里有两组内存值,但只有 kbmemfree、kbmemused、kbmemavail 和 %memused 是有效指标,其余如 kbbuffers、kbcached 已被现代内核弃用(Linux ≥ 4.0)。

  • kbmemavail 是真正可用内存(含可回收 cache),单位 KB;换算成 GB 可除以 1024²,比如 12582912 ≈ 12 GB
  • %memused 是更可靠的百分比,它基于 total - available 计算,比老式 used/total 更准
  • 若 %memused 持续 > 95% 且 kbmemavail 接近 0,再结合 sar -W 看 pswpin/s、pswpout/s 是否突增,基本可断定发生过 OOM 前兆
  • 注意:sar -r 不显示 swap 使用量,要查 swap 占用得额外跑 sar -S -f /var/log/sa/saXX

定位具体时间点:用 -s 和 -e 缩小范围

全量 sar -r -f /var/log/sa/sa15 输出可能上千行,手动翻效率低。直接切片:

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载
  • sar -r -f /var/log/sa/sa15 -s 02:00:00 -e 04:00:00 | grep -E "(Average|^[0-9])" —— 只看凌晨 2–4 点,并过滤掉头尾说明行
  • 若怀疑是某次部署后出问题,用 date -d "2026-09-28 14:30:00" +%H:%M:%S 算出对应系统时区时间,再套进 -s/-e
  • sar -r -f /var/log/sa/sa15 | awk '$5 > 98 {print $1,$2,$5}' —— 快速筛出 %memused 超 98% 的时间点($5 是字段序号,不同版本可能偏移,先 sar -r -f /var/log/sa/sa15 | head -2 确认列对齐)

关联进程线索:sar -q 和 sar -w 辅助判断

内存耗尽往往伴随负载飙升和频繁上下文切换,单看 sar -r 容易漏因:

  • sar -q -f /var/log/sa/sa15 查 runq-sz(运行队列长度)和 ldavg-1(1 分钟负载):若两者同步冲高,说明 CPU 在疯狂调度内存紧张的进程
  • sar -w -f /var/log/sa/sa15 看 cswch/s(每秒上下文切换数):正常值一般 %memused 峰值重合,极可能是 OOM Killer 启动前兆
  • 注意:sar 不记录具体哪个进程吃内存,要定位罪魁得结合当时 dmesg | grep -i "killed process" 或 journalctl --since "2026-09-28 03:15:00" | grep -i oom

真正难的不是查数据,而是理解 kbmemavail 和 %memused 的计算逻辑——它们依赖内核的 memory reclaim 机制反馈,而该机制在 cgroup v2 或容器环境下可能被干扰;如果服务器启用了 memory.low 或 memory.min 限制,sar -r 显示的 available 会虚高,这时候必须交叉验证 cgroup 内存统计。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4470

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3753

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

3053

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7550

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

7182

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

4093

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3565

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3819

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习