什么是 MemAvailable
MemFree 只统计完全没被使用的内存,而 Linux 会把大部分空闲内存拿去做页缓存与内核缓存,因此 MemFree 小并不等于内存紧张。MemAvailable 是内核综合可回收缓存、slab 可回收部分与低水位估算出的“还能分配给新进程的内存量”,也就是 free 命令 available 列的数据来源。判断内存是否充足,看 MemAvailable 比看 MemFree 有意义得多。
基本信息
| 字段来源 | /proc/meminfo 的 MemAvailable |
|---|---|
| free 对应 | available 列 |
| 内核版本 | 约 3.14 起提供该字段 |
| 相关字段 | MemFree、Buffers、Cached、SReclaimable、Shmem |
| 容器注意 | 未映射 lxcfs 时看到的是宿主数值 |
| 容器替代 | cgroup 的 memory.current 与 memory.stat |
典型使用场景
- 内存告警判读:区分“缓存占用”与“真实可用不足”
- 容器内存核对:确认应用看到的是宿主还是容器自身的内存数据
- 页面响应变慢排查:区分是内存压力还是 CPU 瓶颈
- 容量规划:用可用内存与增长趋势评估扩容时点
- 清理策略验证:评估回收缓存后可用内存是否真的改善
对照查看
对照查看
free -h # total/used/free/buff-cache/available
grep -E 'MemTotal|MemFree|MemAvailable|Cached|SReclaimable' /proc/meminfo
cat /proc/pressure/memory # some/full 压力指标
cat /sys/fs/cgroup/memory.current 2>/dev/null # 容器内实际用量
cat /sys/fs/cgroup/memory.stat 2>/dev/null | head -10
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches # 仅排障用,生产慎用字段对照
| 字段 | 含义 | 判读要点 |
|---|---|---|
| MemFree | 完全空闲内存 | 偏小很正常,不代表内存不足 |
| MemAvailable | 估算可分配量 | 判断内存是否充足的首选 |
| Cached | 文件内容缓存 | 多数可回收,但含 Shmem |
| SReclaimable | 可回收 slab | dentry/inode 缓存占大头 |
| Shmem | tmpfs 与共享内存 | 属于不可随意回收的部分 |
drop_caches 只用于排障与验证,它会丢弃缓存并让后续请求重新从磁盘读取,生产环境频繁使用会显著拖慢业务。
没有 lxcfs 的容器里 meminfo 显示宿主数据:据此判断容器内存会得出完全错误的结论,应用侧内存限制要看 cgroup 文件。
巡检脚本用可用内存占总内存的比例做分级告警,比固定阈值更稳:不同规格的机器可以共用一套规则,也方便横向对比同类节点的水位。