我目前在用于各种项目的服务器上运行 VMware vSphere 5。我主要用它磨练我的管理技能和运行一些游戏服务器。
最近我正在考虑转向 Xen (xen.org) 或 Citrix XenServer(免费版)。
当我查看 XenServer 中未包含的各种功能时,我注意到未包含的一个功能是内存过量使用。据我所知,这是 VMware vSphere 上的。问题是,由于我在小型环境(1 台服务器)中使用 VMware,所以我甚至不确定我是否使用了内存过量使用。
所以我想知道它是什么(内存过量使用)以及我如何知道我是否在使用它?
答案1
内存超额承诺意味着允许正在运行的虚拟机拥有比物理主机实际拥有的更多的分配 RAM(总计)。
因此,将您想要同时运行的 VM 中的 RAM 添加起来,然后为虚拟机管理程序留出一些空间,如果总数小于物理 RAM,则说明您没有过度提交。
答案2
在 VMware ESX 和 ESXi 中,如果您安装了 VMware Tools,它们将启用内存管理驱动程序(又名气球驱动程序)。
允许内存过度提交的另一种机制是在 ESX/ESXi 级别进行交换/分页,但这非常慢,您应该避免使用它。
在 ESXi 5 中,除此之外,还有另外 2 种机制可以实现内存过量使用。一种是内存去重,其中相同的内存段将仅分配一次。有一个 vmkernel 线程将在空闲时间扫描内存以查找此类段。
另一种机制是内存压缩。服务器将通过压缩一些内存来腾出空间,而不是进行交换。
要了解您是否正在使用,请添加分配给所有虚拟机(包括 ESXi 控制台)的内存,为 vmkernel 添加大约 100MB(这并不准确)。如果这大于物理内存,则说明您过度使用了内存。
您还可以在 ESXi 服务器的性能计数器中检查气球大小和每个虚拟机使用的交换空间。
答案3
Xen 确实有动态内存管理技术,即 ballooning 和 self-ballooning。
确实如此不是支持内存过量使用,因为它确实不是允许虚拟机实际使用比系统中物理可用内存更多的内存。
换句话说:使用 Xen,您必须在虚拟机之间对 RAM 进行物理分区,但您仍然可以在运行时动态调整这些分区,而无需重新启动虚拟机。
另一方面,VMware vSphere Hypervisor 可以还为虚拟机提供比物理内存更多的内存,如果内存不足,可以将其交换到磁盘真实的ram(通过膨胀其他虚拟机或类似的东西)。
PS,顺便提一下,Xen 在 Trascendent Memory 中也采用了完全不同的技术:支持它的虚拟机(据我所知 Linux >= 3.0)可以将其用于各种目的(主要是作为页面缓存,减少实际磁盘的 IOPS)。