如何在/proc/meminfo中计算MemTotal

4
当我执行cat /proc/meminfo命令时,报告内容如下:
MemTotal:        2034284 kB
MemFree:         1432728 kB
Buffers:           16568 kB
Cached:           324864 kB
SwapCached:            0 kB
Active:           307344 kB
Inactive:         256916 kB
Active(anon):     223020 kB
Inactive(anon):    74372 kB
Active(file):      84324 kB
Inactive(file):   182544 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1152648 kB
HighFree:         600104 kB
LowTotal:         881636 kB
LowFree:          832624 kB
SwapTotal:       4200960 kB
SwapFree:        4200960 kB
Dirty:                60 kB
Writeback:             0 kB
AnonPages:        222868 kB
Mapped:            80596 kB
Shmem:             74564 kB
Slab:              24268 kB
SReclaimable:      14024 kB
SUnreclaim:        10244 kB
KernelStack:        1672 kB
PageTables:         2112 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5218100 kB
Committed_AS:     833352 kB
VmallocTotal:     122880 kB
VmallocUsed:       13916 kB
VmallocChunk:      50540 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       4096 kB
DirectMap4k:       20472 kB
DirectMap4M:      888832 kB

我有一个计算Memtotal的公式:

Memtotal = MemFree + Cached + Active + Inactive + Mapped + Shmem + Slab + PageTables + VmallocUsed

但我不知道这个公式是否正确,有没有人可以帮忙澄清一下?


可能是如何考虑meminfo中的所有内存?的重复问题。 - sarnold
顺便提一下,在我的系统上,我得到的结果是:342136 + 4121640 + 2786880 + 2446580 + 95700 + 11644 + 280100 + 17252 + 304180 == 10406112。但是 10406112 != 6111456。我认为数学还不太对。 :) - sarnold
1个回答

2

我认为从meminfo中很难达到精确值(基于总内存验证的加法)。尽管如此,在我的看法中,以下应该让您接近TotalMemory数字。

TotalMemory = MemFree + Buffers + Cached + Dirty + AnonPages + Slab + VmAllocUsed

在您的示例中: 1432728 + 16568 + 324864 + 60 + 222868 + 24268 + 13916 = 2035272 一些参考资料: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt?id=HEAD#l451 (从上面建议的另一篇stackoverflow文章) 除此之外,我认为不稳定性是由于VmAllocUsed造成的。


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