Linux内存free命令解读,判断内存是否不足
很多人执行 free -h 后看到 free 那一列数值很小就以为内存不够用了,其实这个判断经常出错。
本文会带你逐个看懂 free 命令的输出字段,重点用 available 列判断 Linux 内存是否真的不足,并给出查看高占用进程、清理缓存和验证效果的具体命令,适合刚接触服务器运维的零基础用户。
先看懂 free 命令的每一列到底代表什么
执行最常用的命令:
free -h
典型输出如下:
total used free shared buff/cache available
Mem: 7.6Gi 2.1Gi 356Mi 128Mi 5.2Gi 5.0Gi
Swap: 2.0Gi 0B 2.0Gi
第一行是物理内存(Mem),第二行是交换分区(Swap,可以理解成内存不够时临时借用的硬盘空间)。
各列含义:
total:总内存。used:已用内存,包含进程实际占用的部分。free:完全空闲的内存,这个值小不代表内存不足。shared:多个进程共享的内存,通常很小。buff/cache:内核用于缓存磁盘数据的内存,这部分是可回收的。available:估算出来的、新程序还能拿来用的内存,这个才是判断内存是否充足的关键。
判断内存是否不足,优先看 available 列,而不是 free 列。 当 available 远大于你要启动的服务所需内存时,内存就是够用的。
用 available 列判断内存是否真的紧张
available 是内核综合了可回收的 buff/cache 之后给出的估算值,比 free 更贴近真实可用内存。
判断标准可以这样记:
available占total的比例在 20% 以上,通常说明内存比较健康。available低于total的 10%,且Swap的 used 持续增长,说明内存已经偏紧。available接近 0,同时出现卡顿、OOM(内存耗尽杀进程)、服务被系统杀掉,才是真正的内存不足。
如果 free 很小但 available 很大,多半只是内核把空闲内存拿去做磁盘缓存了,这是正常现象,不用紧张。
想要更直观地持续观察,可以用:
free -h -s 3
这条命令每 3 秒刷新一次,方便观察 available 和 Swap 的变化趋势。
定位到底是谁在占用内存
确认内存偏紧后,下一步是找出高占用进程。
按内存占用从高到低排序:
ps aux --sort=-%mem | head -n 10
也可以打开交互式工具:
top
进入 top 后按 Shift + M,即可按内存占用排序。
重点看 %MEM 和 RES 两列,RES 表示进程实际占用的物理内存。
找到异常进程后,先确认它是不是业务必需:
systemctl status 进程名
确认可以安全重启的,再执行:
systemctl restart 进程名
不要直接对不认识的进程执行 kill,先查清它属于哪个服务,避免误杀系统关键进程。
手动释放缓存与避坑提醒
buff/cache 占用高时,可以手动释放缓存做临时缓解:
sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
第一条命令把脏数据写回磁盘,第二条释放页缓存、目录项和 inode 缓存。
释放后再次执行 free -h,会看到 free 变大、buff/cache 变小,但 available 变化通常不大——这恰好说明之前的内存本来就可用。
几个容易踩的坑:
- 把
free小直接当成内存不足,然后盲目加内存或重启服务器。 - 频繁执行
drop_caches,这会让磁盘读性能下降,因为缓存被清空了。 - 只看一次结果就下结论,内存有波动,建议连续观察几分钟。
- 忽略 Swap 的 used 增长,它往往是内存长期偏紧的早期信号。
验证与后续处理
调整或优化之后,用下面几条命令复查效果:
free -h
vmstat 1 5
vmstat 输出中的 si、so 两列表示每秒从 Swap 换入换出的数据量。
如果它们长期为 0,说明内存压力已经缓解;
如果持续大于 0,说明内存依然吃紧。
如果排查后确认是业务本身内存需求超过了物理内存,可以考虑优化程序配置、限制进程内存上限,或者升级服务器规格。
具体规格和价格建议以你所用云厂商控制台的实际显示为准。
常见疑问
free 很小但 available 很大,需要处理吗?
不需要,这是内核利用空闲内存做缓存的正常表现,缓存可随时回收给新程序使用。
available 已经很低,但服务还能跑,算内存不足吗?
算临界状态。
此时应结合 Swap 使用和进程占用一起看,提前优化,避免触发 OOM。
释放缓存后 available 没怎么变,是命令没生效吗?
命令已生效,只是 available 本来就估算的是可回收内存,所以变化不明显,这反而说明内存并不紧张。
Swap 用满了怎么办?
Swap 用满通常意味着物理内存严重不足,应优先减少内存占用或增加物理内存,而不是单纯扩大 Swap。
记住核心结论:判断 Linux 内存是否不足,看 available 列和 Swap 变化趋势,而不是 free 列。
掌握这套判断方法后,再配合进程排查和效果验证,就能快速定位大多数内存问题。