作为VMware的系统管理员,您可以在VMware基础设施客户端(VI客户端)中监视内存的使用情况 。您还可以潜在地自由支配您在整个虚拟基础设施中的很多内存,通过使用VMware esxtop工具和安全shell (SSH)客户端,以了解哪些虚拟机和程序在使用内存并作出适当的改变。

  在本文中,TechTarget中国的特约专家Gabrie van Zanten将介绍VMware如何利用内存,如何使用esxtop工具获取关于基础设施内存使用情况的详细统计资料,以及透明页共享(TPS)和膨胀(ballooning)如何共同努力,以最大化利用可用内存。

  从VMware基础设施的客户端检查内存

  比如,我已从64GB的物理内存上运行着29台虚拟机的主机上截取了一系列截图。在第一个屏幕截图,我们在VMware基础设施客户端上 ,选择主机并查看概要表。在右上角,我们看到“资源”部分。以下图片显示,64GB的物理内存被使用了41.06GB。

如何使用esxtop工具确定VMware ESX内存使用情况_esxtop 

  从这个图像,我们可以看到,64GB的可用内存中有41.06GB内存正在被使用。但难道你不想知道哪一个进程或虚拟机使用了这41.06GB吗?为了找到答案,我们会使用PuTTY作为我们的SSH客户端来运行VMware的esxtop工具。

  让我们开始一个PuTTY会话。登录,输入esxtop命令并按下M键以定位到内存标签。屏幕上方显示出了大量有关您主机内存使用情况的信息。

  让我们从顶端开始分析它。

  物理内存

如何使用esxtop工具确定VMware ESX内存使用情况_休闲_02

  MEM的平均超额告诉我们,在过去5至15分钟内,内存的平均超额。值为0.20的意思是超额使用了20 %的内存。第二行中,我们看到PMEM统计资料,说明主机拥有的物理内存。此主机有65534MB(或63.99 GB) ,其中800兆是分配给cos(即服务控制台) ; 672MB正在被VMkernel使用和40437MB(或39.489GB的)被“other“使用,这就可以空余出23624MB的可用内存。

  注意:“other”使用的内存被官方描述为: “除掉ESX服务控制台和ESX VMkernel以外的一切 。 ”它不一定是所有的VM消耗的内存。例如每个VM也有内存的开销。内存开销的总量取决于客户操作系统的类型、虚拟的CPU的数量、被配置的内存量和客户系统是32位还是64位。例如,一个拥有2048MB内存的双CPU虚拟机,客户机是32位系统的话将有126MB额外开销,如果是64位系统将有163MB额外开销。

  服务控制台内存

如何使用esxtop工具确定VMware ESX内存使用情况_职场_03

下一行关于VMKMEM的不是那么重要,虽然它的确告诉你VMkernel如何执行的。但是,除非你排除的故障是不寻常的问题,否则你将不会觉得这些是有价值的数据。更有价值的是显示服务控制台(cos)当前的状态,详细的数据在下一行。第一个有价值的(在这种情况下,免费)是在控制台中闲置的内存数量。在这个例子中,该cos在已分配的800MB中还有92MB内存可以使用。接下来,我们看到的是已配置的交换空间和可用的交换空间大小,这两个值都是1600MB。通常情况下,我为主机配置为1600MB的交换分区和800MB的控制台内存。

  显然800MB看起来就足够了,第三方插件通常在控制台运行,因此默认的272MB的内存是不够的。在这种情况下,你想提高cos内存并将其设置为800MB。你可以把它设置更高一些,但你可能会超过分区空间。因此,最多只可以给控制台分配1600MB,我总是设置swap分区为1600MB。这是最佳的执行方式,所以我没有立刻调整swap分区。

  透明页共享(TPS)

如何使用esxtop工具确定VMware ESX内存使用情况_内存_04

  回到我们的例子中,非一致性存储器访问,或NUMA技术,具有广泛的使用价值。正如有了VMkernel,你根本不必担心这些。这只能展示给你ESX是如何通过NUMA节点(如果您有NUMA技术,这就是)分配内存,但这些都不是你的工作所要关注的。要更加重视PSHARE行。这行可以告诉我们通过透明页共享(TPS)技术能节省多少内存,这个值在某些环境中可能是相当大的。在我们的例子中,虚拟机共享了32492MB内存,其中的3779MB是通用的,这使我们节省了28713MB(或28GB)的内存。

  让我以不同的方式来解释这个。在这台主机上,总数为32492MB的内存,与大量子机的值相同。通过透明网共享技术,ESX只需要3779MB就可以”存储”32492MB的东西。因此,我们节省28713MB内存。在我看来,在一台单个主机上,这是非常大量的内存。试想一下,这可以为您的整个虚拟环境节省多少空间。

  什么是透明页共享?

  VMware公司的ESX使用透明页共享可以节省大量的物理内存,尤其是在在(虚拟)环境中使用很多类似的操作系统。虚拟层(Hypervisor)将检查虚拟机想写到物理内存的每一个内存块。如果那个内存块与物理内存中已经保存的一个内存块相同,那么就没有必要使用额外的物理内存。相反,ESX只是设置了一个指针并记住这个区块被其他虚拟机使用。只要虚拟机是读这块内存并且永远不去改变,那么该内存块就保存一份。ESX将利用这一块内存,直到VM想要进行修改(写入此内存块) 。当发生这种情况, ESX会创建一个附加的副本。

  举个例子,当安装完Windows Server 2003系统,我们可以看到,一个没有任何额外的应用程序的Windows基本安装,启动后将只是占据250 MB内存。现在假设我运行20台Windows虚拟机的在同一个虚拟层上。 20个Windows的实例,每个需要250MB内存,没有TPS功能的话,就总共要消耗总数为5000MB的RAM(物理内存) 。但是具备TPS功能, 250MB将被储存到物理内存中并被使用。换言之,内存节省了5750MB。这件事情是不可以轻视的。

如何使用esxtop工具确定VMware ESX内存使用情况_VMware ESX_05

  交换内存

如何使用esxtop工具确定VMware ESX内存使用情况_内存_06

  这听起来奇怪,但我相信这两个SWAPS和MEMCTL数字应该是0 。让我来解释一下它们是什么:

  1. SWAP值显示ESX服务器的交换内存使用统计情况,“cur”是当前的互换使用, “target”是ESX预计互换多少以及“ R/S”和“W/s”显示当前交换的速度。
  2. MEMCTL显示的是利用vmmemctl模块或balloondriver(当前)回收的物理内存总数,ESX试图收回(target)和ESX最高可以收回(max)。

  现在,它们为什么应该为零?简单地说,因为它们都表明ESX没有足够的内存分配给子机。当资源越来越稀缺时,ESX想做的第一件事情是从客户操作系统那里收回不太宝贵的内存。由于的ESX不能直接与客户操作系统对话,它使用VMware工具memctl-driver来做这件事情。

  膨胀(Ballooning)

  当VMware ESX耗尽了子虚拟机的空间,ESX在需要内存的子虚拟机中启动一个进程,此进程会申请内存。这个虚拟机操作系统然后检查列表,看看是否有空闲的内存。如果有,它将会分配给这个进程。下一步, VMware的工具将占用这些内存,并告知ESX到底哪些内存块它可以分配给其他的虚拟机。通过这种方式,将其他虚拟机未使用的内存挤出,提供给这些需要更多内存的虚拟机。

  交换到磁盘

  如果膨胀的技术没有效,ESX将利用最后的手段:交换虚拟机的内存到磁盘上。由于磁盘的读写速度总是远远低于物理内存,虚拟机会发现性能下降,这不是我们想要的方式。

  因此,当你看到SWAP curr或者 MEMCTRL curr指标当前高于零,就应该真正开始调查哪些是错误的。作为一个经验法则,您不应该消耗您ESX内存载入超过80%或85%。这样当虚拟机开始使用更多的物理内存时,你总是有剩余的内存。此外,在配有VMware高可用性的集群中,您的ESX主机载入超过80%到85%的内存时可能让你陷入困境