zhuli8 KVM的虚拟机,用的魔方云,我开的小鸡10核20G, 当小鸡中内存到19G,然后又释放了, 我看的时候只用了8G内存。 查看qemu这个小鸡的进程,还是占用了19G, 小鸡里面只用了8G, 就算重启小鸡,宿主机的qume进程还是占用19G 只有完全重启qume进程,内存才会释放, 大家有什么办法解决这个问题。
James 这个问题通常是由于 KVM (Kernel-based Virtual Machine) 和 qemu-kvm 的内存管理机制所引起的。即使虚拟机内部的操作系统释放了内存,qemu 进程在宿主机上可能不会立即释放这些内存。以下是一些可能的解决方法: 使用 ballooning 技术: 内存气球机制(ballooning)是一种动态调整虚拟机内存的技术,可以在虚拟机内部和宿主机之间动态分配内存。确保你的虚拟机配置启用了 virtio-balloon 驱动,并在宿主机上运行相应的内存气球守护进程。 在虚拟机的XML配置文件中添加以下内容: <devices> <memballoon model='virtio'> </memballoon> </devices> 使用 cgroups 限制内存使用: 可以使用 cgroups 来限制 qemu-kvm 进程的内存使用。这样即使 qemu-kvm 进程不会主动释放内存,cgroups 也会强制将内存回收。 配置 cgroups 例子: sudo cgcreate -g memory:/qemu sudo cgset -r memory.limit_in_bytes=20G /qemu sudo cgclassify -g memory:/qemu $(pgrep qemu) 定期重新启动 qemu-kvm 进程: 如果以上方法仍然不能解决问题,可以考虑定期重新启动 qemu-kvm 进程来释放内存。这虽然不是一个最优雅的解决方案,但在某些情况下可能是一个有效的权宜之计。 更新 KVM 和 qemu 版本: 确保你使用的是最新版本的 KVM 和 qemu,新的版本通常包含了对内存管理和性能优化的改进。 调整虚拟机内存回收策略: 检查和调整虚拟机内部的内存回收策略,确保虚拟机内部的内存释放能够被及时感知到。 请尝试以上方法,并根据你的具体环境进行适当的调整。如果问题仍然存在,可能需要更深入地分析宿主机和虚拟机的配置,或者考虑其他虚拟化解决方案。 当然,最好的方法是,换掉垃圾魔方。