直接查看/proc/meminfo中Active(anon)与Inactive(anon)之和即为匿名内存总量,Active(file)与Inactive(file)之和即为文件缓存主体,二者分别占MemTotal百分比可快速估算内存使用构成。

直接看 /proc/meminfo 里的关键字段就能拆解匿名内存和文件缓存的占比,不需要额外工具或复杂计算。
看 Active(anon) 和 Inactive(anon):匿名内存总量
匿名内存指没有对应磁盘文件的内存页,比如进程堆、栈、mmap 的私有映射等。它不能被简单丢弃,回收前通常得换出到 swap。
- Active(anon):正在被活跃使用的匿名页(如常驻工作集)
- Inactive(anon):暂时不活跃但可能很快再用的匿名页
- 两者之和 ≈ 当前系统中所有匿名内存占用量
看 Active(file) 和 Inactive(file):文件缓存主力
文件缓存(page cache)来自磁盘文件读写,可随时回收——这是 Linux “看起来内存快用光、其实很健康”的主要原因。
- Active(file):最近访问过、仍较热的文件缓存页
- Inactive(file):访问频次低、内核认为可优先回收的文件缓存页
- 两者加起来基本就是当前
buff/cache中的主体(不含 buffers)
快速估算占比的方法
执行下面这条命令,一次性算出匿名内存与文件缓存各自占总内存(MemTotal)的百分比:
awk '/^MemTotal:/ {total=$2} \
/^Active\(anon\):/ {anon_act=$2} \
/^Inactive\(anon\):/ {anon_inact=$2} \
/^Active\(file\):/ {file_act=$2} \
/^Inactive\(file\):/ {file_inact=$2} \
END {
anon = anon_act + anon_inact;
file = file_act + file_inact;
printf "匿名内存: %.1f%% (%d kB)\n文件缓存: %.1f%% (%d kB)\n", \
anon/total*100, anon, file/total*100, file
}' /proc/meminfo
输出类似:
匿名内存: 18.3% (2984576 kB)
文件缓存: 42.7% (6972100 kB)
注意 Buffers 和其他内存项的区别
Buffers(块设备元数据缓存)和 SReclaimable(slab 可回收部分)不属于 page cache,也不算在上述 file 统计里。它们单独存在,但通常体量小得多。若需完整覆盖,可补充:
– Buffers:看 /proc/meminfo 中 Buffers 行
– Slab 可回收部分:SReclaimable 字段,多由 dentry/inode 缓存构成


















