VMware ESXi 上 Linux/Unix 中的内存膨胀

VMware ESXi 上 Linux/Unix 中的内存膨胀

我需要帮助来回收 Linux/Unix 机器中膨胀的内存。请帮帮我。我找到了一些解决方案,但它们在生产服务器上对我来说不可行。

我只需要知道如何在不重新启动或将机器移至另一台主机的情况下回收膨胀的内存。

答案1

膨胀只会在某些非常特殊的条件下发生。要使 VMware ESXi 在虚拟机中“膨胀”膨胀驱动程序,主机必须处于非常严重的内存争用状态,通常主机上的可用内存不足 4%。

气球驱动程序的理念是让 VMTools 开始消耗虚拟机内的内存,虚拟机的操作系统对此作出响应,为气球驱动程序提供内存页面。气球驱动程序实际上并不需要这些页面用于任何用途,但它会告诉虚拟机管理程序哪些内存页面虚拟机实际上不会用于任何用途,因此虚拟机管理程序可以安全地丢弃它们。如果这不能解决主机上的内存争用问题,虚拟机管理程序将继续膨胀气球驱动程序,默认情况下最高可达分配虚拟内存的 65%,这会导致虚拟机上的操作系统开始交换到磁盘。这不是一个好结果,但它比虚拟机管理程序交换到磁盘要好得多,因为虚拟机上的操作系统实际上知道哪些页面适合交换到磁盘。

限制内存膨胀的方法是关闭每个虚拟机的内存膨胀(这不是一个好策略),或者为虚拟机预留内存。如果虚拟机有 4 GB 的 RAM 和 3 GB 的内存预留,那么内存膨胀驱动程序只能膨胀到 1 GB。

由于膨胀对于 ESXi 来说是一种最后的策略,它几乎总是意味着您在主机上安装的内存太少。

答案2

您可以设置sched.mem.maxmemctl虚拟机的参数,以指定通过内存膨胀从客户机回收的最大内存量(以兆字节为单位)。也可以将其设置为 0,以完全禁用客户机的内存膨胀。

请注意,如果发生内存膨胀,您的主机很可能需要安装更多物理内存。内存膨胀允许 ESXi 从客户机中获取“未使用”的内存并将其用于其他客户机,但现代操作系统实际上不再有“未使用”的内存,因为它们拥有的任何东西都会用于存储缓存等。因此,当这些内存被拿走时,客户机的性能可能会降低。

相关内容