如何计算/proc/meminfo中的MemTotal

问题描述 投票:0回答:2

当我

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 + 缓存 + 活动 + 非活动 + 映射 + Shmem + Slab +页表+ VmallocUsed

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

linux-kernel
2个回答
2
投票

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

总内存 = MemFree + 缓冲区 + 缓存 + 脏 + 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 文章) 除此之外,我认为波动是由于 VmAlocUsed 造成的。


0
投票

这个 Perl 脚本基于 @anugraha 的答案。它会尝试求和。

perl -ne '@a=split; $n=$a[1]; if (/MemTotal/) {$t=$n} elsif (/(MemFree|Buffers|Cached|Dirty|AnonPages|Slab|VmallocUsed|HugePages_Total):/) { @a=split;$n=$a[1];if (/HugePages/){$n*=1024*1024}; $s += $n;} END { $missing=$t-$s;  print "MemTotal $t KiB\nSum $s KiB\nMissing $missing KiB\n";}' /proc/meminfo

它也会显示丢失的记忆。

样品:

MemTotal 65303264 KiB
Sum 63881072 KiB
Missing 1422192 KiB
© www.soinside.com 2019 - 2024. All rights reserved.