如何从/proc/meminfo(类似于htop)计算系统内存使用情况

23

运行htop命令可以以这样的格式呈现内存使用情况:

1.92G/5.83G

问题:我应该如何解释从/ proc / meminfo 中获取的值,以便可以编程计算内存使用情况?

我正在寻找类似于这个的东西:在Linux中给出百分比的CPU使用率的准确计算,意思是伪代码可以,我不需要可以编译的东西,只需要逻辑。 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
1
嗨@twalberg,感谢您的回复。所以你是建议像[MemUsed]=[MemTotal]-[MemAvailable]这样的东西? - tgogos
我并没有提出任何建议,因为不清楚你实际上正在寻找什么样的“图片”。那可能是一个合理的估计,但它不会是精确的 - 在Linux(或者实际上任何重要的操作系统)中的内存账户是复杂的,不容易简化为两个变量的方程式... - twalberg
"free" 命令会输出与 /proc/meminfo 相同的信息。 - Douglas Su
1个回答

92

我是htop的作者。这些是我在内存使用情况中绿色、蓝色和黄色条形图的数字计算方法:

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

htop源代码位于:linux/LinuxProcessList.clinux/Platform.c

htop截图


蓝色怎么样?另外,“缓冲区”是什么? - nimser
抱歉,缓冲区被错误标记为黄色,实际应该是蓝色。man proc 关于缓冲区的描述是:“相对临时的存储器,用于存储不应过于庞大的原始磁盘块”。 - Hisham H M
@NicolasWormser [RAM的30%是“缓冲区”。这是什么?](https://unix.stackexchange.com/questions/440558/30-of-ram-is-buffers-what-is-it) - sourcejedi
3
为什么要从缓存内存中减去共享内存(Shmem)的大小 (Cached + SReclaimable - Shmem)? top 命令在计算 buff/cache 时似乎没有这样做。 - Matt K
@MattK,如果我要猜的话,可能是因为Shmem包含在Cached的数字中,他认为它不应该算作真正的缓存内存。 - JacobTDC
如果使用的内存(绿色)为2GB,我杀死了一个RSS为400MB的进程。为什么在我杀死这个进程后,使用的内存变成了500M?是因为RSS之外还有另一个物理内存吗? - hawk.hsieh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接