内存膨胀不会尝试回收页面缓存

内存膨胀不会尝试回收页面缓存

我有一台运行 Proxmox 的主机,上面有一些虚拟机。由于某些应用程序的内存使用情况不可预测,并且希望在有可用内存时为某些虚拟机(如数据库)提供内存用于页面缓存,因此我配置了过多的内存。

我尝试使用比主机更多的内存来测试此设置的可靠性,但这个 OOM 会终止虚拟机,而是尝试回收其他虚拟机的页面缓存。

我可以做些什么来让气球驱动程序回收内存,或者我误解了内存气球的工作原理?

答案1

如果发生负载转移,向 VM 客户机过度配置内存始终存在成为严重问题的风险。除此之外,内存膨胀还会使容量规划变得更加复杂。

首先,气球。这意味着有意识的客户机保留其最大内存和当前内存之间的差额,为主机留下一些可用内存。确认您的客户机具有必要的驱动程序,服务器 Linux 发行版可能具有。Linux KVM 要求用户更改当前大小;我假设您没有手动调整气球大小。

Proxmox 发行版有所不同。pvstatd 具有自动膨胀功能,其中根据客户机配置的内存份额和可用主机内存调整客户机大小。找出客户机配置的份额,并阅读日志以了解发生了哪些气球事件。

假设一个客户机在内存容量的上限启动。主机在此过程中分配一些 GB 的内存。尽管 Linux 内存管理在使用物理内存页面时很懒惰,但要不了多久就会引用大量客户机内存。同时,Proxmox 需要一段时间才能注意到并自动调整膨胀。Linux 客户机尤其可以非常快速地放弃缓存,但这种膨胀是以监控工具的速度而不是内核的速度移动的。主机操作系统内存管理会耗尽其回收选项并导致 OOM 终止,这并不奇怪。

一个你不会喜欢的安全选项是不要过度配置客户机内存,这也意味着不会出现内存膨胀。根据其固定共享内存或其他算法来调整数据库的大小。将应用服务器的大小调整为大约最大预期或观察到的内存。内存方面的支出可以购买可预测的性能。

将客户机和主机的利用率设定在最大值以下。利用率可能为 80%,尽管工作流程千差万别,因此您可以承受的程度会有所不同。此缓冲区为内核的系统内存等管理事务留出空间,其余部分则用于缓存。

如果您想要超额配置,您的容量规划需要更加复杂。减少客户机大小,直到您获得不会使主机 OOM 的负载。在容量边缘启动新客户机之前调整客户机气球。研究和调整 Proxmox 的自动系统并测试它是否有用。

相关内容