![ESXi 服务器中内存是如何分配的?](https://linux22.com/image/593756/ESXi%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E5%86%85%E5%AD%98%E6%98%AF%E5%A6%82%E4%BD%95%E5%88%86%E9%85%8D%E7%9A%84%EF%BC%9F.png)
我们有一台具有 48 GB RAM 的 ESXi 4.1 服务器。
对于每个虚拟机,我们分配 4GB 内存。由于服务器将有 13 个虚拟机,我的经理认为这是不对的。
我准备向他们解释 ESXi 实际上会自己管理内存,但他们却问我为 ESXi 服务器本身分配了多少内存。
我没有分配任何内存(我甚至没有听说过为 ESXi 服务器本身分配内存的选项)。
ESXi 服务器的内存是如何分配的?它如何在虚拟机之间无问题地过度分配/分配 RAM?
答案1
这里涉及的不仅仅是 ESXi,
- 每个虚拟机将消耗最多 4GB 的内存以及记录在案的“开销”这里。这取决于分配的 vCPU 和内存。每个虚拟机至少将使用 4261.98 MB(4096 + 165.98)
- ESXi 自身的内存开销,这取决于硬件。最简单的方法是查看系统vSphere 客户端中的内存使用情况。我记得它大约是 1.3GB,但正如所述非常依赖于硬件。
内存分配和过量使用说明
请注意虚拟机管理程序不会预先分配所有内存,这取决于虚拟机的使用情况。但是,如果虚拟机尝试分配并使用分配给它们的所有内存,了解会发生什么情况是值得的。
您的虚拟机 + 主机尝试使用的最大值大约为,55 GB 里程可能会有所不同
- ESXi 使用了 1.3 GB
- 4261.98 MB * 13 由虚拟机使用
还有另一个方面需要考虑,那就是内存阈值。默认情况下,VMware 的目标是有 6% 的可用内存(高内存阈值)。因此55 GB使用的内存需要减少到~45GB
这意味着如果虚拟机使用已分配的内存,主机将需要从某个地方回收大约 10,500 MB 的内存。ESX 会执行三项操作来找到额外的 10.5 GB。
内存回收方法
- 透明页面共享
- 记忆膨胀
- 虚拟机管理程序交换
你应该阅读并理解了解 VMware® ESX™ Server 中的内存资源管理。
取决于大量因素,这三种情况的组合将/可能发生在过度承诺的主机上。您需要测试您的环境并监控这些指标以了解过度承诺的影响。
一些值得了解的粗略规则(均在上述论文和其他来源中)。
- 透明页面共享对于使用 2/4 MB 页面的虚拟机,不会发生这种情况。由于您已为 Windows VM 分配了 4096 MB,因此默认情况下它们将使用 2/4 MB 页面(依赖于 PAE)。只有在内存压力下,VMware 才会将大页面分解为可以共享的 4 KB 页面。TPS 依赖于使用空闲 CPU 周期并以一定速率扫描内存页面。它返回内存的速度相对较慢(想想一个小时而不是几分钟)。因此,启动风暴意味着 TPS 不会帮助您。从这三个中,这对性能的影响最小。更多来自文档,
在硬件辅助内存虚拟化(例如,Intel EPT 硬件辅助和 AMD RVI 硬件辅助 [6])系统中,ESX 会自动将客户物理页面备份到大型主机物理页面(2MB 连续内存区域,而不是 4KB 常规页面),从而减少 TLB 未命中,从而获得更好的性能。在这样的系统中,ESX 不会共享这些大页面,因为:1) 找到两个具有相同内容的大页面的概率很低,2) 对 2MB 页面进行逐位比较的开销比对 4KB 页面的开销大得多。但是,ESX 仍会为每个大页面内的 4KB 页面生成哈希值。由于 ESX 不会换出大页面,因此在主机交换期间,大页面将被拆分成小页面,以便这些预先生成的哈希值可用于在小页面被换出之前共享它们。简而言之,在主机内存过量使用之前,我们可能看不到硬件辅助内存虚拟化系统的任何页面共享。
乘热气球接下来启动(阈值是可配置的,默认情况下,这是当主机可用内存少于 6%(介于高和软件之间)时启动的。确保安装了驱动程序,并注意 Java 和管理应用程序。操作系统无法了解垃圾收集器接下来会做什么,最终会触及已交换到磁盘的页面。对于专门运行 Java 应用程序的服务器来说,完全禁用交换以确保不会发生这种情况并不罕见。 请参阅 vSphere Memory Management SPECjbb 的第 17 页
虚拟机管理程序交换,从这三种方法中,是唯一一个担保“内存”在规定的时间内可供虚拟机管理程序使用。如果 1 和 2 没有为其提供足够的内存以保持在难的阈值(默认为 2% 的可用内存)。当您阅读性能指标(自己做)时,您会意识到这是三者中性能最差的。尽量避免这种情况,因为几乎所有应用程序的性能影响都非常明显两位数百分比
还有一个状态需要注意低的(默认为 1%)。从手册上看,这会大大降低你的性能,
在极少数情况下,当主机可用内存降至低阈值以下时,虚拟机管理程序会继续通过交换和内存压缩来回收内存,并且还会阻止所有消耗的内存超过其目标内存分配量的虚拟机的执行。
概括
需要强调的关键点是,不可能从白皮书中预测您的环境将如何运作。
- TPS 能给你多少?(取决于你的虚拟机与其操作系统、服务包和正在运行的应用程序的相似程度)
- 您的虚拟机分配内存的速度有多快?它们分配内存的速度越快,您越有可能在影响较小的内存回收方案成功将您保持在当前阈值之前跳转到下一个阈值。
- 根据应用程序的不同,每个内存回收方案都会产生很大的不同影响。
测试您的平均场景、95% 百分位数场景以及最终的最大值,以了解您的环境将如何运行。
编辑1
值得补充的是,使用 vSphere 4(或者 4.1,记不清了),现在可以将虚拟机管理程序交换放在本地磁盘上,但仍然动态VM。如果您使用共享存储,我强烈建议您将虚拟机管理程序交换文件默认移动到本地磁盘上。这可确保当一台主机面临严重内存压力时,不会影响同一共享存储上的所有其他 vSphere 主机/VM。
编辑2
根据评论,ESX 不会预先分配内存这一事实以粗体显示...
编辑3
进一步解释一下记忆阈值。
答案2
VMware(及其他虚拟化技术)分享根据各种算法在虚拟机之间共享资源(内存、处理器时间、各种 I/O)。
有可能过度承诺资源,因为并非所有虚拟机都会一直使用它们所需的所有处理、内存或 I/O。 VMware 的资源管理指南可能是了解 ESXi 功能的最佳去处。
您还可以通过为不同的资源分配不同的虚拟机权重来管理算法的效果 - 例如,您可以为应用程序服务器虚拟机分配比文件服务器虚拟机更高的处理器权重。但是,开箱即用的设置可以很好地处理大多数要求。在某些情况下,在这里进行一些配置足以安抚那些不太明白的经理,但当然要小心,阅读您版本的 VMware 的文档并了解您正在做什么。如果您的经理不需要进一步安抚,那么只需使用默认设置即可。
请注意,过度使用并不总是一个好主意,特别是如果您在单个服务器上进行了虚拟化。您应该监控 ESXi 环境中的资源使用情况,如果您经常消耗全部一个或多个资源,则应在必要时添加其他主机/资源。
答案3
让您的 VMWare ESXi 安装处理它。由于 VMWare 系统使用内存膨胀、压缩和重复数据删除技术。
如果虚拟机使用类似的操作系统,则可以节省一些成本。请确保在客户虚拟机中启用 VMWare 工具以充分利用这些功能。