我有一台运行 Proxmox 的主机,上面有一些虚拟机。由于某些应用程序的内存使用情况具有不可预测性,并且希望在有可用内存时为某些虚拟机(如数据库)提供内存用于页面缓存,因此我过度配置了内存。
我尝试通过尝试使用比主机更多的内存来测试此设置的可靠性,并且此 OOM 杀死了虚拟机,而不是尝试回收其他虚拟机的页面缓存。
我可以做些什么来让气球驱动程序回收内存,还是我误解了内存气球的工作原理?
我有一台运行 Proxmox 的主机,上面有一些虚拟机。由于某些应用程序的内存使用情况具有不可预测性,并且希望在有可用内存时为某些虚拟机(如数据库)提供内存用于页面缓存,因此我过度配置了内存。
我尝试通过尝试使用比主机更多的内存来测试此设置的可靠性,并且此 OOM 杀死了虚拟机,而不是尝试回收其他虚拟机的页面缓存。
我可以做些什么来让气球驱动程序回收内存,还是我误解了内存气球的工作原理?
在负载转移的情况下,向 VM 来宾过度配置内存始终存在成为非常严重问题的风险。最重要的是,膨胀使容量规划变得更加复杂。
首先,气球。这意味着有意识的来宾保留其最大内存和当前内存之间的差异,为主机留下一些可用内存。确认您的访客拥有必要的驱动程序,服务器 Linux 发行版可能具备。Linux KVM 要求用户更改当前大小;我假设您没有手动调整气球大小。
Proxmox 发行版有所不同。pvstatd 能够自动气球,根据配置的内存份额和可用主机内存调整来宾大小。找出来宾的配置共享是什么,并阅读日志以了解发生的气球事件。
假设来宾在内存容量的顶端启动。主机在进程中分配一些 GB 的内存。尽管 Linux 内存管理在使用物理内存页方面很懒惰,但在引用大量来宾内存之前,不会花费那么长时间。同时,Proxmox 会注意到并自动调整气球还需要一段时间。特别是 Linux 客户机可以非常快地放弃缓存,但是这种膨胀是以监控工具的速度而不是以内核的速度移动的。主机操作系统内存管理可能会耗尽其回收选项和 OOM 终止,这并不奇怪。
一个您不喜欢的安全选项是,不要过度配置来宾内存,这也意味着没有气球。根据其固定共享内存或任何其他算法调整数据库大小。将应用程序服务器的大小调整为大约最大预期或观察到的内存。内存费用购买了可预测的性能。
将访客和主机利用率设定为低于最大值的某个位置。尽管工作流程差异很大,因此您可以获得的结果也会有所不同,但利用率可能为 80%。该缓冲区为管理事物(例如内核的系统内存)留下空间,其余空间用于缓存。
如果您想要超额配置,您的容量规划需要更加复杂。减少客户机大小,直到获得不会导致主机 OOM 的负载。在容量极限时开始新客人之前调整客人气球。研究和调整 Proxmox 的自动系统并测试它是否有帮助。