有没有办法透明地回收 qemu-kvm 客户机的内存,或者阻止使用内存?
场景 A:
客人在高峰时段使用了 8GB 的 RAM,晚上的使用量又回到了 4GB,但是客人仍然向主机索要 8GB 的 RAM。
场景 B:
客户机使用 2GB RAM,但页面缓存中有 6GB RAM。客户机从主机索要 8GB RAM,但其中最多 6GB 的 RAM 可能对另一个客户机系统更重要。
我对气球的第一个想法是,客人不会“看到”气球效果,但当发送“气球 2048”时,客人内部的内存实际上减少到~2GB。
答案1
您可以打开自动气球在 libvirt 客户机中通过编辑 XML:
<memballoon model='virtio'>
虚拟内存气球设备一个参数 autodeflate
,默认值为off
。将其设置为on
可启用自动气球功能。
<memballoon model='virtio' autodeflate='on'>
请注意,virt-manager 中没有 GUI 选项来启用或禁用此设置。
如果您手动调用 qemu(请保持理智,不要这样做),则添加,automatic=true
到气球设备,例如-device virtio-balloon,automatic=true
。
自动膨胀需要 qemu/kvm 1.3.1 或更高版本。
请注意,这可能无法解决所有内存争用问题;最好只是拥有足够的 RAM 来运行所有虚拟机。
答案2
每天晚上繁忙时段后,在 VM 和/或 VM 主机中执行 cron 操作:
同步;回显 1 > /proc/sys/vm/drop_caches
它删除 fs 缓存并将其作为可用内存返回给系统,然后 KVM/Hypervisor 可以将其视为空闲内存并找到其他用途
也能很好地与 Docker 系统配合使用