由于内存分配错误,Libvirt/QEmu 机器失败并拒绝重启

由于内存分配错误,Libvirt/QEmu 机器失败并拒绝重启

我在使用 libvirt 时遇到了问题。系统重启时,所有虚拟机 (VM) 都顺利启动并继续运行。然后,根据日志,在某个时间点,一组机器关闭。当我尝试重启机器时,我收到一条错误消息,提示内存分配失败,尽管有足够多的内存可用。

server ~ # free
             total       used       free     shared    buffers     cached
Mem:      16176648   16025476     151172          0     285432     950300
-/+ buffers/cache:   14789744    1386904
Swap:            0          0          0
server ~ # virsh start zimbra
error: Failed to start domain zimbra
error: Unable to read from monitor: Connection reset by peer

server ~ # tail -n 4 /var/log/libvirt/qemu/zimbra.log
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin QEMU_AUDIO_DRV=none /usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 3072 -smp 2,sockets=2,cores=1,threads=1 -name zimbra -uuid d05ddb7a-83c4-a77b-d8bc-a322648520cf -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/zimbra.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -drive file=/var/lib/libvirt/images/zimbra.img,if=none,id=drive-ide0-0-0,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=19,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:21:a9:ad,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -vnc 192.168.1.2:25 -k de -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
char device redirected to /dev/pts/2
Failed to allocate 3221225472 B: Cannot allocate memory
2012-07-06 08:42:56.076+0000: shutting down
server ~ # uname -a
Linux server 3.2.0-26-generic #41-Ubuntu SMP Thu Jun 14 17:49:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

系统是 Ubuntu 12.04 服务器。问题似乎发生在上次重启之后,这是由于多次软件包升级和一次内核升级造成的。我尝试使用之前的内核启动,问题仍然存在。机器接连出现故障。内核使用的缓冲区一直在增加。我不确定这是崩溃的原因还是只是对可用空间的反应。

Munin 的日间记忆 Munin 每周记忆

关于如何调试这个问题有什么建议吗?

附录:

榆树

答案1

根据您粘贴的错误消息,您有足够的可用内存——某些程序试图分配 3221225472 字节(3.2GB 左右),并且free(1) 表示您至少有最多(如果您不使用缓冲区或缓存)大约 1.3GB 的可用内存。

看起来您是在没有交换的情况下运行的。这肯定不会帮助您解决内存分配问题。如果您通常使用交换运行(我认为这是非常如果你觉得这是一个虚拟化服务器上​​的好主意,那么肯定是出现了一些问题,你需要修复它。

另一种可能性是,您已将系统配置为使用大页面运行,但现在系统已经运行了一段时间,您没有足够的未碎片内存来分配虚拟机所需的所有大页面。

相关内容