我有一台 Ubuntu 服务器,内存为 320GB。我在这台机器上安装了 xen 4.4.1,并运行 2 个 Debian VM。一个有 +-100GB 内存,另一个有 +-200GB 内存。一切运行正常,直到有一次,200GB 的机器报告只有 128GB。该服务器正常运行时间为 144 天,上个月的某个时候,有超过 70GB 的内存丢失。
在 dom0 上:
$ sudo xl info
...
total_memory : 327634
free_memory : 16547
...
$ sudo xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 510 32 r----- 54.4
mycroft 1 102400 16 -b---- 33.3
adler 2 204000 16 -b---- 34.5
$ uname -a
Linux moriarty 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
根据 xl 列表,在具有 204000MB 的虚拟机上:
$ free -m
total used free shared buffers cached
Mem: 128404 6220 122184 0 10 56
-/+ buffers/cache: 6152 122251
Swap: 0 0 0
$ uname -a
Linux adler 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
$ cat /proc/meminfo
MemTotal: 131486352 kB
MemFree: 125117048 kB
Buffers: 11216 kB
Cached: 58016 kB
SwapCached: 0 kB
Active: 6057868 kB
Inactive: 47632 kB
Active(anon): 6036284 kB
Inactive(anon): 324 kB
Active(file): 21584 kB
Inactive(file): 47308 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 12 kB
Writeback: 0 kB
AnonPages: 6036296 kB
Mapped: 14740 kB
Shmem: 344 kB
Slab: 20024 kB
SReclaimable: 6504 kB
SUnreclaim: 13520 kB
KernelStack: 2728 kB
PageTables: 14824 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 65743176 kB
Committed_AS: 91568356 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 214612 kB
VmallocChunk: 34359523687 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 208896000 kB
DirectMap2M: 0 kB
我已经重启了两台服务器,但没有任何结果:dom0 一直报告 204gB,而机器本身报告 128gB。造成这种差异的原因是什么?我该如何修复?
编辑
dmesg 输出给了我这个
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] Xen: 0000000000000000 - 00000000000a0000 (usable)
[ 0.000000] Xen: 00000000000a0000 - 0000000000100000 (reserved)
[ 0.000000] Xen: 0000000000100000 - 0000002000000000 (usable)
[ 0.000000] Xen: 0000002000000000 - 00000031ce000000 (unusable)
最后一行的范围似乎与缺失的记忆相对应。
答案1
我在使用 debian wheezy 7.8 客户端时也遇到了同样的问题。安装 wheezy backports kernel 3.16.0-0.bpo.4-amd64 后,这个问题就解决了。这是客户端的问题,我没有触碰主机。
将以下行添加到 /etc/apt/sources.list:
deb http://ftp.uk.debian.org/debian/ wheezy-backports main
然后运行
apt-get update
apt-get -t wheezy-backports install linux-image-amd64
reboot
答案2
您是否已设置内存膨胀?如果已设置,则“丢失”的内存应为膨胀驱动程序回收的内存。
cat /proc/meminfo
您能发布内存“丢失”的机器上的输出吗?
编辑
从您的 /proc/meminfo 输出来看,气球确实在工作。
查看“DirectMap4k”值:它报告说,MMU 以 4k 粒度管理了大约 200 GB 的 RAM。换句话说,虚拟化硬件可以看到完整的 200 GB RAM。
但是,“MemTotal”值清楚地显示总可用内存“仅”为 135 GB。
这意味着内核/驱动程序级别的某些东西“窃取”了一些内存用于其他用途。如此大量的空闲内存是内存膨胀的完美目标。您可以在这里找到更多信息。