在 Linux 系统中,“缓存变小”通常指 page cache / buffer cache / slab cache 等可用缓存减少,或者你观察到 free、top、/proc/meminfo 里 cached 字段下降。常见原因可分为以下几类:
当 空闲内存(free)变少,内核会:
表现:
free -h
total used free shared buff/cache available
Mem: 16Gi 14Gi 300Mi 200Mi 1.5Gi 1.2Gi
buff/cache 明显变小
✅ 这是正常行为,Linux 会优先用内存做缓存,不够再回收。
swappiness 高 → 更容易回收缓存 / 换出内存60查看:
cat /proc/sys/vm/swappiness
echo 3 > /proc/sys/vm/drop_caches
会立即清空 page cache / dentries / inodes
例如:
缓存是“用出来的”:
如果:
缓存自然变小
某些数据库(MySQL、PostgreSQL)或程序使用:
open(path, O_DIRECT)
会绕过 page cache
大文件顺序读写时:
导致:
used ↑
buff/cache ↓
查看:
cat /proc/meminfo | grep Slab
或
slabtop
常见原因:
可能导致:
容器内:
cache 受 cgroup 限制查看:
cat /sys/fs/cgroup/memory/memory.stat
宿主机内存紧张 → 杀容器或回收缓存
vm.dirty_ratio
vm.dirty_background_ratio
影响写入缓存,不直接减少读缓存,但会影响整体表现
cat /proc/sys/vm/vfs_cache_pressure
值越大 → 越容易回收 dentry / inode 缓存
✅ 正常情况:
❌ 异常情况:
free -h
top
vmstat 1
cat /proc/meminfo
slabtop
dmesg | grep -i oom
如果你愿意,可以告诉我:
free -h 和 /proc/meminfo 输出我可以帮你更精确定位原因。