如何从 /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)的主要内容,如果未能解决你的问题,请参考以下文章