vSphere教育 – 使用*太多内存configuration虚拟机有什么缺点?

VMware内存pipe理似乎是一个棘手的平衡行为。 有了集群RAM,资源池,VMware的pipe理技术(TPS,膨胀,主机交换),客户机内RAM利用率,交换,预留,份额和限制,还有很多变数。

我处于客户端使用专用vSphere群集资源的情况。 但是,他们正在configuration虚拟机,就好像它们在物理硬件上一样。 反过来,这意味着一个标准的VM版本可能有4个vCPU和16GB或更多的RAM。 我来自小的学校(1个vCPU,最小的RAM),检查现实世界的使用和必要的调整。 不幸的是,许多供应商的要求和不熟悉虚拟化的人需要更多的资源,而不是必要的…我有兴趣量化这个决定的影响。


来自“问题”群集的一些示例。

资源池摘要 – 看起来几乎是4:1过度提交。 注意大量的膨胀的RAM。 在这里输入图像描述

资源分配 – “最差情况分配”列显示,这些虚拟机在受限条件下可以访问configuration的RAM的50%以下。 在这里输入图像描述

上面列表中顶级虚拟机的实时内存利用率图。 4个vCPU和64GB RAM分配。 平均使用9GB以下。 在这里输入图像描述

同一个VM的摘要 在这里输入图像描述


  • 在vSphere环境中过度使用和过度configuration资源(特别是RAM)有什么缺点?

  • 假设虚拟机可以运行在更less的内存中,那么说虚拟机的configuration比实际需要更多的内存,这是否公平呢?

  • 有什么反驳: “如果一个虚拟机有16GB的RAM分配,但只使用4GB,有什么问题? ”? 例如,客户需要教育虚拟机与物理硬件不一样吗?

  • 应该使用什么特定的度量来度量RAM的使用情况。 跟踪“主动”与时间的峰值? 看着“消费”?


更新:我使用vCenter Operations Manager来分析此环境,并获取上面列出的群集统计信息的一些详细信息。 虽然事情肯定是过度的,虚拟机实际上过度configuration与不必要的内存,真正(微小)的内存足迹显示在集群/主机级别没有内存争夺…

我的结论是,虚拟机应该是正确的大小,有一点点的操作系统级caching的缓冲区。 超出无知或供应商的“要求”导致这里提出的情况。 在任何情况下,内存膨胀似乎都很糟糕,因为性能会受到影响,所以正确的大小可以帮助防止这种情况发生。

更新2:这些虚拟机中的一些开始崩溃:

kernel:BUG: soft lockup - CPU#1 stuck for 71s! 

VMware将此描述为大量内存过度使用的症状 。 所以我想这个问题的答案。

在这里输入图像描述


vCops“超大型虚拟机”报告… 在这里输入图像描述

vCops“可回收废物”图…

在这里输入图像描述

vSphere的内存pipe理是相当不错的,尽pipe所用的术语经常引起很多混淆。

一般来说,应该避免内存过度提交,因为它会造成这种types的问题。 然而,有些时候它是无法避免的,所以预先警告了!

在vSphere环境中过度使用和过度configuration资源(特别是RAM)有什么缺点?

过度投入资源的主要缺点是,如果您有争用,您的主机将被迫在幕后调度,交换或智能地进行调度/重复,以便为每个VM提供所需的RAM。

为了膨胀,vSphere将在选定的虚拟机中膨胀一个“气球”的RAM,然后将膨胀的RAM提供给需要它的guest虚拟机。 这并不是真的“坏” – 虚拟机正在窃取对方的内存,所以没有进行磁盘交换 – 但是如果这些虚拟机依靠分析虚拟机的内存使用情况,可能会导致错误的警报和扭曲的度量,因为内存赢了不会被标记为“膨胀”,只是它被操作系统“使用”。

vSphere可以使用的另一个function是透明页面共享(TPS) – 这本质上是RAM重复数据删除。 vSphere会定期扫描所有分配的RAM,查找重复的页面。 find后,它将取消复制并释放重复的页面。

查看vSphere的内存pipe理白皮书(PDF) – 特别是“ESXi中的内存回收”(第8页) – 如果您需要更深入的解释。

假设虚拟机可以运行在更less的内存中,说虚拟机configuration比所需内存更多的开销是否公平?

没有明显的开销 – 您可以在16 GB的主机上分配100 GB的RAM(但是,这并不意味着您应该 ,因为上述原因)。

所有虚拟机使用的内存总量是graphics中显示的“活动”曲线。 当然,在计算你想要过多的时候,你不应该只依赖这个数字,但是如果你有历史数据,你可以根据实际使用情况进行分析和处理。

在这个VMWare社区线程中讨论了“活动”和“消耗”RAM之间的区别。

有什么反驳: “如果一个虚拟机有16GB的RAM分配,但只使用4GB,那有什么问题? ? 例如,客户需要接受教育吗?

简单的答案是肯定的 – 客户应该始终接受最佳实践的教育,而不pipe他们使用的工具。

应该教育客户根据自己的用途来调整虚拟机的大小,而不是他们想要的 。 很多时候,人们会过度地指定他们的虚拟机,只是因为他们可能需要16 GB的内存,即使他们历史上每天2GB的容量也是如此。 作为一名vSpherepipe理员,您拥有挑战他们的知识,指标和权力,并询问他们是否真的需要他们分配的RAM。

也就是说,如果将vSphere的内存pipe理与严格控制的过度使用限制相结合,那么在实践中很less有问题,长时间使用RAM的可能性相对较小。

除此之外,自动vMotion(VMware称为Distributed Resource Scheduling )本质上是您的虚拟机的负载平衡器 – 如果单个虚拟机成为资源pipe理员,则DRS应该迁移虚拟机以充分利用群集的资源。

应该使用什么具体指标来衡量内存使用情况。 跟踪“主动”与时间的峰值?

大部分内容覆盖了上面 – 你主要关心的应该是“主动”的RAM使用,尽pipe你应该仔细的定义你的overcommit阈值,这样如果你达到一定的比例( 这是一个体面的例子 ,虽然可能有点过时)。 通常情况下,我肯定会保持在集群内存总容量的120%以内,但是您可以自己决定比较合适的比例。

关于内存过度提交的一些很好的文章/讨论:

  • 内存在生产中过度使用? 对对对
  • vSphere – 过度使用内存?
  • 内存在vSphere中过度使用

除了克雷格·沃森(Craig Watson)的出色答案,我还想补充一下:

在VMware中过度使用内存不是你应该有目的的。 它通常表明,您或您的客户是超额订购硬件。

如果过度提交是唯一的select,那么我强烈build议您执行优先规则。 如果有人倾向于给予非关键的虚拟机16GB的vRam,而只需要4GB的虚拟机 – 至less把虚拟机放在一个较低的资源池中,或者给它一个低优先级。 您真的不希望关键的生产数据库被hypervisor换出。 性能不仅会下降,还会占用后端存储上的I / O队列。

如果您正在运行快速存储(FusionIO,Violin,本地SSD等),那么交换可能不是一个大问题,但是对于传统的SAN存储,最终会影响连接到同一arrays/控制器的每个虚拟机和主机。