available列才是系统当前能立即分配给新进程的内存,已扣除不可回收部分并包含可快速释放的cache;buffers是块设备原始数据缓存,cache是受lru管理的页缓存,二者均为加速i/o的热数据暂存。

看 Available 列,不是 used,也不是 free —— 它才是系统当前能立即分给新进程的内存,已扣除了不可回收部分,也包含了可快速释放的 cache。
先搞清 Buffer 和 Cache 各自是什么
Buffer 是块设备(如磁盘)的原始数据缓存,比如刚写入但还没刷盘的元数据、inodes、dentries,生命周期短,通常几秒就清掉;Cache 是页缓存(PageCache),即最近读写过的文件内容,受 LRU 管理,只要进程申请内存,内核会立刻回收这部分。
两者都属于“热数据暂存”,不是泄漏,也不是浪费。它们的存在本身就是在加速 I/O。
用 free -h -w 拆开看 Buffers 和 Cache 占比
Linux 5.0+ 内核支持 free -h -w,会强制分列显示 Buffers 和 Cache 两列:
- Buffers:一般几十 MB 到几百 MB,偏小,波动快
- Cache:通常是 Buffers 的数倍甚至十倍以上,占 buff/cache 大头
老内核(/proc/meminfo:
-
Buffers:行对应 Buffers 大小 -
Cached:行接近 PageCache + 部分 slab 可回收项 -
SReclaimable:是 Cached 中明确可安全回收的部分(比如 dentry/inode 缓存)
判断真实剩余可用内存,盯这三处
别被 used 高吓到,重点看:
- Available:数值 > 500MB 基本健康;持续低于 100MB 就该排查进程
- SwapUsed:swap 使用量开始上升,说明物理内存真不够了
- si/so(用 vmstat 1 查):非零且持续出现,代表在频繁换入换出,内存严重承压
举例:total=16G,used=14G,buff/cache=11G,但 Available=1.8G → 实际压力不大;若 Available=32MB,si=120,那就要立刻查 top 或 ps。
别手动清缓存,除非有明确依据
sync && echo 3 > /proc/sys/vm/drop_caches 能清 PageCache 和 dentries/inodes,但:
- 不碰 Buffers(它由内核自动管理)
- 清完首次读文件变慢,可能引发 I/O 尖峰
- 解决不了真正问题——如果 Available 已极低,清 cache 只腾出几百 MB,而吃内存的是某个 RES 上升的进程
看到 buff/cache 占 75% 就去狂清,结果 top 里 RSS 还在涨,说明你根本没找对方向。











