文件是什么
/proc/meminfo 是内存的全局汇总视图:MemTotal/MemFree/MemAvailable 描述总量与可用量,Buffers 与 Cached 描述缓存,Slab(含 SReclaimable/SUnreclaimable)描述内核对象,Committed_AS 与 CommitLimit 描述内存承诺额度,另有 Swap 与 Shmem 等字段。读它的关键是看字段组合——Linux 会用空闲内存做缓存,MemFree 偏低属正常,判断余量应看 MemAvailable。
基本信息
| 文件路径 | /proc/meminfo(全局视图,无 cgroup 细分) |
|---|---|
| 总量与余量 | MemTotal、MemFree、MemAvailable |
| 缓存类 | Buffers、Cached(Cached 含 tmpfs 的 Shmem) |
| 内核对象 | Slab、SReclaimable、SUnreclaim |
| 承诺额度 | Committed_AS、CommitLimit |
| 交换与共享 | SwapTotal、SwapFree、Shmem |
典型使用场景
- 判断内存是否真的紧张:MemAvailable 与 SwapFree 一起看,而不是看 MemFree
- 识别内核对象泄漏:SUnreclaim 持续单调增长是重要信号
- 解释「free 显示内存快满了」:缓存计入导致的常见误解
- 评估内存承诺水位:Committed_AS 逼近 CommitLimit 说明超额分配空间不足
- 与 cgroup 指标对照,区分宿主整体压力与单个服务的用量
提取关键行
提取关键行
grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached)' /proc/meminfo # 总量与缓存
awk '/^(Slab|SReclaimable|SUnreclaim|Shmem)/{print}' /proc/meminfo # 内核对象与共享内存
awk '/^(Committed_AS|CommitLimit)/{print}' /proc/meminfo # 内存承诺与上限
awk '/^(SwapTotal|SwapFree)/{print}' /proc/meminfo # swap 水位
free -h # 更直观的等价视图,含 available 列
sleep 60 # 隔时间再采一次,重点比较 SUnreclaim 等字段的增量字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| MemTotal | 物理内存总量 | 作为分母理解其余字段 |
| MemFree | 完全空闲的内存 | 偏低属正常,不能据此判断不足 |
| MemAvailable | 内核估算的可用内存 | 判断余量的主要依据 |
| Buffers | 块设备元数据缓存 | 与文件系统负载相关 |
| Cached | 页缓存(含 Shmem) | 可回收,但 tmpfs 部分不能随意回收 |
| SUnreclaim | 不可回收的内核 slab | 持续增长需怀疑内核对象泄漏 |
| CommitLimit | 可承诺的内存上限 | 与 Committed_AS 对比看超额分配余量 |
MemFree 低不等于内存不足:页缓存属于「用得上就留着、紧张就回收」的内存,因此常被计入已用。判断是否需要干预,应看 MemAvailable 以及是否出现回收与换页压力。
容器里读 /proc/meminfo 得到的是宿主数据,不能代表容器用量;容器应看 /sys/fs/cgroup/<组>/memory.current 与 memory.stat,两者视角不同,混用会导致容量判断失真。