Linux中无法解释的+ 28Gb内存过度使用

时间:2015-07-28 14:08:11

标签: linux memory-management kvm

我的服务器上出现了一个非常奇怪的问题:总使用的内存超过了所有进程的已用内存总和。并且'更多'是28千兆字节!

服务器有128Gb内存。它可用作KVM虚拟化主机。有几个qemu进程,内存分配总和(-m开关)为116784Mb(116Gb),几乎没有其他进程。

但同时有28Gb的使用交换空间,相当繁忙的交换进/出操作。

我为所有进程内存运行计算,它小于70Gb:

ps aux|awk '{a+=$6}END{print a}'
66432908

VSS约为180Gb:

ps aux|awk '{a+=$5}END{print a}'
180574360

这里/ proc / meminfo:

MemTotal:       131988428 kB
MemFree:         1002468 kB
Buffers:           14172 kB
Cached:           396696 kB
SwapCached:      2566436 kB
Active:         14984848 kB
Inactive:        5634948 kB
Active(anon):   14944552 kB
Inactive(anon):  5592652 kB
Active(file):      40296 kB
Inactive(file):    42296 kB
Unevictable:      428476 kB
Mlocked:          151800 kB
SwapTotal:      41947128 kB
SwapFree:       12291740 kB
Dirty:                16 kB
AnonPages:      18074276 kB
Mapped:            19608 kB
Shmem:             46300 kB
Slab:            4617044 kB
SReclaimable:    3296416 kB
SUnreclaim:      1320628 kB
KernelStack:        6424 kB
PageTables:       209028 kB
CommitLimit:    107941340 kB
Committed_AS:   124320872 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      739544 kB
VmallocChunk:   34358825808 kB
AnonHugePages:   1236992 kB
Hugepagesize:       2048 kB

系统在augfs / tmpfs上运行,但tmpfs使用大约650Mb ......

我迷失了:那些28GB的内存用于什么?

这个问题在我们所有的服务器上发生到一定程度......

1 个答案:

答案 0 :(得分:1)

请注意,使用“VSS”进行简单添加会多次计算内存页数。当共享库加载到进程中时,这些库的内存不会在每个进程中重复 - 如果10个进程加载相同的库,则只有1个库的副本物理上在RAM中。你正在总结的VSS数据,报告每个进程的内存,就好像它有自己的库私有副本一样。因此,如果10个进程加载了相同的库,则计算该库的内存10次。

基本上,不可能通过计算'ps'报告的'VSS'数字来总计总内存使用量。要获得远程准确的使用数据,您需要考虑进程使用多少内存与私有共享 - 这些数据在/ proc / $ PID / smaps中可用,但正确解释它很难。

特别是WRT到KVM,除了访客RAM本身,QEMU还使用内存进行其他一些操作。 BIOS ROMS,视频RAM是两个大的,但也有许多用于磁盘/网络上的I / O操作的瞬态分配。如果guest虚拟机的I / O负载很高,这可能会增加超出-m RAM数字的一些重要内存使用量。很难给出一个很好的答案,确切地知道每个RAM以外的客户有什么样的内存开销,所以你需要对它进行监控。如果你看到虚拟机被推送到交换机,它只是一个迹象表明你试图在主机上放置太多虚拟机,我担心。