我正在使用最新的 ubuntu quantal 并启动一个 kvm 客户机,它应该有 2048 MB 的内存。现在几个小时后,我可以看到这个客户的 kvm 进程大约有 2700 MB,所以比客户机应该能够使用的内存多 700 MB。我的意思是像 1% 这样的小开销是可以的,但 30% 不行吗?!
root 8631 74.0 22.2 4767484 2752336 ? Sl Nov07 512:58 kvm -cpu kvm64 -smp sockets=1,cores=2 -cpu kvm64 -m 2048 -device virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,bootindex=100 -drive file=rbd:data/vm-disk-1,if=none,id=drive-virtio0,cache=writeback,aio=native -device virtio-net-pci,netdev=net0,bus=pci.0,addr=0x12,id=net0,mac=02:7a:86:e6:1a:6c,bootindex=200 -netdev type=tap,id=net0,vhost=on -usbdevice tablet -nodefaults -enable-kvm -daemonize -boot menu=on -vga cirrus
root 8694 0.0 0.0 0 0 ? S Nov07 0:00 [kvm-pit/8631]
这是怎么可能的?又该如何预防呢?
答案1
您可以使用 virtio balloon 设备尝试将内存返回给系统,但这仅在客户操作系统未使用其所有内存时才有用
KVM 确实需要一些内存才能运行,但我相信一段时间后很多内存都会被交换出去
此外,如果您最终运行大量类似的虚拟机,请确保启用了 Linux 相同页面合并。这将允许共享来自类似虚拟机的内存;占用更多 CPU 使用率,但对于大量虚拟机而言是值得的。我认为现在 ubuntu 默认启用此功能
答案2
一个可能的问题是您在驱动器上使用 cache=writeback。除了客户机使用的内存外,这还会占用您的部分内存。
还没有时间去验证是否确实如此,但这只是猜测。