为何top命令内存输出与/proc/meminfo信息不一致?是否应使用该文件?
关于用/proc/meminfo实现top内存信息的问题
完全可以用/proc/meminfo,top的内存数据本质就是从这里提取的,你看到的差异只是top对原始数据做了二次计算,而非meminfo本身不适用。
差异的核心原因
top显示的内存指标不是直接取用meminfo的原始字段,而是根据自身的统计逻辑组合计算:
- 比如top中
Mem:行的「已用内存」,不是简单的MemTotal - MemFree,还要减去Buffers、Cached、SReclaimable(可回收slab内存)等字段 - 不同版本的top(比如procps-ng系列)计算逻辑可能有细微调整,但数据源都是meminfo
复刻top内存显示的计算逻辑
如果要让你的实现和top第4、5行(通常是Mem和Swap行)完全对齐,可以参考以下计算方式:
Mem行对应计算
- 总内存:直接取meminfo中的
MemTotal - 已用内存:
MemTotal - MemFree - Buffers - Cached - SReclaimable - 空闲内存:
MemFree + Buffers + Cached + SReclaimable - 缓存/缓冲:
Buffers + Cached + SReclaimable
Swap行对应计算
- 总交换:直接取
SwapTotal - 已用交换:
SwapTotal - SwapFree - 空闲交换:直接取
SwapFree
验证方式
你可以通过以下方式确认计算逻辑:
- 运行
top -b -n 1获取静态的top输出 - 同时读取
/proc/meminfo的原始数据 - 用上述公式计算,对比top显示的数值是否匹配
内容的提问来源于stack exchange,提问作者Tempest_Sword
相关产品推荐
相关产品推荐

