如何从 /proc/meminfo 计算系统内存使用量(如 htop)

Posted

技术标签:

【中文标题】如何从 /proc/meminfo 计算系统内存使用量(如 htop)【英文标题】:How to calculate system memory usage from /proc/meminfo (like htop) 【发布时间】:2017-05-04 15:09:32 【问题描述】:

运行htop 命令会以如下格式显示内存使用情况:

1.92G/5.83G

问题:我应该如何解释取自 /proc/meminfo 的值以便以编程方式计算使用的内存?

我正在寻找类似的东西:Accurate calculation of CPU usage given in percentage in Linux? 表示伪代码是可以的,我不需要可以编译的东西,只需要逻辑。 htop 的源代码是一个可以寻找的地方,但我没有找到为此编写的代码行...

$ cat /proc/meminfo 
MemTotal:        6110716 kB
MemFree:         2076448 kB
MemAvailable:    3800944 kB
Buffers:          382240 kB
Cached:          1496216 kB
SwapCached:            0 kB
Active:          2830192 kB
Inactive:         796648 kB
Active(anon):    1749940 kB
Inactive(anon):   109808 kB
Active(file):    1080252 kB
Inactive(file):   686840 kB
Unevictable:          48 kB
.
.
.
...

【问题讨论】:

这取决于您想要的图片有多准确。对于您引用的1.92G/5.83G 统计信息,只需将前两行中的数字从 kB 转换为 GB(即除以 1024*1024)......其余的大部分行只是对当前内容的细分使用基于它的使用方式,是否被修改,以及其他一些特征...... 嗨@twalberg,感谢您的回复。所以你提出类似 [MemUsed] = [MemTotal] - [MemAvailable] 的建议? 我并没有真正提出任何建议,因为尚不清楚您实际上在寻找什么样的“图片”。这可能是一个合理的估计,但并不准确 - Linux(或任何重要的操作系统,就此而言)中的内存核算很复杂,不容易简化为两个变量的方程式...... free 命令转储与 /proc/meminfo 相同。 【参考方案1】:

htop 作者在这里。这些是我为获得内存计中绿色、蓝色和黄色条的数字所做的计算:

总使用内存 = MemTotal - MemFree 非缓存/缓冲内存(绿色)= 总使用内存 -(缓冲区 + 缓存内存) 缓冲区(蓝色)=Buffers 缓存内存(黄色)= Cached + SReclaimable - Shmem 交换 = SwapTotal - SwapFree

在htop源代码中:linux/LinuxProcessList.c和linux/Platform.c。

【讨论】:

蓝色怎么样?另外,什么是“缓冲区”? 对不起,缓冲区被错误地标记为黄色,它是蓝色的。 man proc 对缓冲区这样说:“相对临时存储不应该变得非常大的原始磁盘块” @NicolasWormser 30% of RAM is “buffers”. What is it? 为什么要从缓存内存中减去共享内存(Cached + SReclaimable - Shmem)? top 命令似乎没有为它的 buff/cache 计算执行此操作。 @MattK,如果非要我猜的话,可能是因为Shmem 包含在Cached 的数字中,他觉得它不应该算作真正的缓存。

以上是关于如何从 /proc/meminfo 计算系统内存使用量(如 htop)的主要内容,如果未能解决你的问题,请参考以下文章

计算进程消费cpu和内存

怎么查看云服务器内存占用情况?

如何在PHP中获取系统信息?

linux 怎么查看内存使用情况

RK3399平台开发系列讲解(内存篇)18.10/proc/meminfo 解析

linux系统重要文件和目录说明