VMware vSphere中的VM性能分析。 第2部分:记忆



第1部分。关于CPU
第3部分。关于存储

在本文中,我们将讨论vSphere中的RAM性能计数器。
内存似乎比处理器越来越明确:如果VM上存在性能问题,很难不注意到它们。 但是,如果它们出现了,处理它们就困难得多。 但是首先是第一件事。

一点理论


虚拟机的RAM是从运行VM的服务器的内存中获取的。 这是很明显的:)。 如果服务器RAM不足以供所有人使用,则ESXi开始应用内存回收技术。 否则,VM操作系统将因RAM访问错误而崩溃。

使用ESXi的技术取决于RAM的负载:
记忆体状态
边界
动作

最低收费的400%
达到上限后,大的内存页面将分成小页面(TPS在标准模式下工作)。
清除
最低收费的100%
大内存页被分成小页,TPS强制工作。
柔软的
minFree的64%
TPS +气球
辛苦
最低收费的32%
TPS +压缩+交换
低位
最低收费的16%
压缩+交换+块
来源

minFree是管理程序运行所需的RAM。

在ESXi 4.1(含ESXi 4.1)之前,默认情况下minFree是固定的-服务器RAM的6%(可以通过ESXi上的Mem.MinFreePct选项更改百分比)。 在更高的版本中,由于minFree服务器上的内存量增加,因此开始根据主机的内存大小而不是固定的百分比值进行计算。

minFree值(默认值)计算如下:
为minFree保留的内存百分比
记忆范围
6%
0-4 GB
4%
4-12 GB
2%
12-28 GB
1%
剩余记忆
来源

例如,对于具有128 GB RAM的服务器,MinFree值将为:
MinFree = 245.76 + 327.68 + 327.68 + 1024 = 1925.12 MB = 1.88 GB
实际值可能相差数百MB,这取决于服务器和RAM。
为minFree保留的内存百分比
记忆范围
128 GB的价值
6%
0-4 GB
245.76兆字节
4%
4-12 GB
327.68兆字节
2%
12-28 GB
327.68兆字节
1%
剩余内存(100 GB)
1024兆字节


通常,对于生产性展位,只有高才能被认为是正常的。 对于测试和开发台,可以接受“清除/柔软”条件。 如果主机上的RAM的MinFree少于64%,则在其上运行的VM肯定会遇到性能问题。

在每种状态下,都会从TPS开始应用某些内存回收技术,但实际上并不会影响VM的性能,而以Swapping结尾。 我会告诉您更多有关它们的信息。

透明页面共享(TPS)。 大致来说,TPS是对服务器上虚拟机的RAM页面进行重复数据删除。

ESXi搜索虚拟机RAM的相同页面,计算并比较页面的哈希值,然后删除重复的页面,并将其替换为服务器物理内存中同一页面的链接。 结果,减少了物理存储器消耗,并且可以实现存储器的一些重新订阅而几乎没有性能损失。


来源

该机制仅适用于4 kB页面(小页面)。 系统管理程序甚至不会尝试对2 MB大小的页面(大页面)进行重复数据删除:找到相同大小的相同页面的机会并不大。

默认情况下,ESXi将内存分配给大页面。 当达到“高”状态的阈值时,将大页面分成小页面;当达到“清除”状态时,强制将大页面分成小页面(请参见系统管理程序状态表)。

如果希望TPS在不等待主机RAM填满的情况下开始工作,则需要在Advanced Options ESXi中将“ Mem.AllocGuestLargePage”值设置为0(默认值为1)。 然后将禁用为虚拟机分配大内存页面。

自2014年12月以来,在所有ESXi版本中,默认情况下已禁用虚拟机之间的TPS,因为已发现理论上允许从一个虚拟机访问另一虚拟机的RAM的漏洞。 详细信息在这里。 我还没有遇到有关利用TPS漏洞的实际实施的信息。

通过ESXi上的高级选项“ Mem.ShareForceSalting”来控制TPS策略:
0-虚拟机间TPS。 TPS适用于不同VM的页面;
1-在VMX中具有相同值“ sched.mem.pshare.salt”的VM的TPS;
2(默认)-VM内TPS。 TPS适用于VM内部的页面。

关闭大型页面并在测试台上启用VM间TPS绝对是有意义的。 它也可以用于具有大量相同类型VM的机架。 例如,在使用VDI的展台上,物理内存节省可以达到百分之几十。

内存膨胀。 对于VM操作系统,如TPS而言,气球不再是一种无害且透明的技术。 但是,通过与Ballooning正确使用,您可以生活甚至工作。

与Vmware Tools一起,在VM上安装了一个特殊的驱动程序,称为气球驱动程序(aka vmmemctl)。 当系统管理程序开始用尽物理内存并进入“软”状态时,ESXi会要求VM通过此气球驱动程序返回未使用的RAM。 反过来,驱动程序则在操作系统级别上运行,并从中请求可用内存。 系统管理程序可以查看Ballall Driver占用了哪些物理内存页,从虚拟机中获取了内存,并将其返回给主机。 操作系统的操作没有问题,因为在操作系统级别,气球驱动程序占用了内存。 默认情况下,Balloon Driver最多可占用虚拟机内存的65%。

如果未在VM上安装VMware Tools或禁用了Ballooning(我不建议这样做,但是有KB :),则管理程序会立即切换到更严格的内存删除方法。 结论:确保VM上的VMware Tools是。


可以通过VMware Tools从操作系统检查Balloon Driver的操作

内存压缩 当ESXi达到Hard时使用此技术。 顾名思义,ESXi试图将4 KB的RAM页面压缩为2 KB,从而释放服务器物理内存中的一些空间。 由于必须先清除页面,因此该技术会大大增加对VM RAM内存页面内容的访问时间。 有时并非所有页面都可以压缩,并且过程本身需要一些时间。 因此,该技术在实践中不是很有效。

内存交换。 短暂的阶段之后,几乎不可避免地使用Memory Compression ESXi(如果虚拟机没有转到其他主机或关闭),则转到交换。 而且,如果剩余的内存非常少(“低”状态),则虚拟机管理程序也会停止分配VM页面的内存,这可能会导致来宾VM出现问题。

这就是交换的工作方式。 打开虚拟机时,将为其创建扩展名为.vswp的文件。 在大小上,它等于VM的非保留RAM:这是已配置和保留内存之间的差异。 使用交换时,ESXi将虚拟机的内存页面卸载到此文件中并开始使用该文件而不是服务器的物理内存。 当然,即使.vswp正在快速存储中,此类“ RAM”存储器也比实际存储器要慢几个数量级。

与气球气球不同,当从VM中选择未使用的页面时,在交换过程中,操作系统或VM中的应用程序正在使用的页面可以转到磁盘。 结果,VM的性能下降,直到挂起。 VM可以正常运行,并且至少可以从操作系统中正确禁用它。 如果您有耐心;)

如果虚拟机已进行交换,这是一种异常情况,如果可能,最好避免这种情况。

基本虚拟机内存性能计数器


因此,我们进入了最主要的部分。 要监视VM中的内存状态,可以使用以下计数器:

活动 -显示虚拟机在上一个测量周期内访问的RAM量(千字节)。

用法与“活动”相同,但占配置的VM内存的百分比。 它使用以下公式计算:活动÷虚拟机配置的内存大小。
高使用率和活动状态并不总是表示VM性能问题。 如果VM积极使用内存(至少可以访问它),这并不意味着没有足够的内存。 相反,这是一个查看操作系统中正在发生的情况的机会。
虚拟机有一个关于内存使用情况的标准警报:



共享 -使用TPS(在虚拟机内部或虚拟机之间)进行重复数据删除的虚拟机中的RAM数量。

已授予 -已分配给VM的主机的物理内存量(千字节)。 包括共享。

已消耗 (已授予-共享)-VM从主机消耗的物理内存量(千字节)。 不包括共享。

如果部分VM的内存不是从主机的物理内存分配的,而是从交换文件分配的,或者该内存是通过气球驱动程序从VM提取的,则“已授予和已使用”中不会考虑此金额。
授予和消耗的高值是完全正常的。 操作系统逐渐从虚拟机管理程序中夺走内存,并且不回馈。 随着时间的流逝,在虚拟机正常工作的情况下,这些计数器的值接近已配置的内存量,并保持不变。

-VM中的RAM量(千字节),其中包含零。 这种内存被认为是免费的虚拟机管理程序,可以分配给其他虚拟机。 来宾OS收到它后,便将某些内容写入了空内存,然后转到Consumed,并且不再返回。

保留的开销 -虚拟机中的虚拟机管理程序为使虚拟机正常工作而保留的RAM量(千字节)。 这是一个小数目,但是它必须在主机上可用,否则VM将无法启动。

气球 -使用气球驱动程序从VM占用的RAM(KB)量。

压缩 -可以压缩的RAM(KB)数量。

交换 -RAM的量(千字节),由于服务器上没有物理内存而将其移动到磁盘。
气球和其他内存回收技术计数器为零。

这是具有150 GB RAM的正常运行的VM的内存计数器的图形外观。



在下图中,VM存在明显的问题。 该图表明,对于此VM,使用了所有描述的用于RAM的技术。 此虚拟机的气球比已使用的气球大得多。 实际上,虚拟机更有可能死掉而不是活着。



ESXTOP


与CPU一样,如果要快速评估主机的状况及其动态性(最多间隔2秒),则值得使用ESXTOP。

使用“ m”键调用“ ESXTOP内存”屏幕,其外观如下所示(已选择字段B,D,H,J,K,L,O):



以下参数对我们来说很有趣:

Mem overcommit avg-主机上超过1分钟,5分钟和15分钟的内存超额预订的平均值。 如果大于零,那么这是查看发生情况的机会,但并不总是表明存在问题的迹象。

PMEM / MBVMKMEM / MB行中 -有关服务器物理内存和VMkernel可用内存的信息。 从这里有趣的地方,您可以看到值minfree(以MB为单位),即内存中主机的状态(在我们的情况下为高)。

NUMA / MB行中,可以看到按NUMA节点(插槽)分配的RAM。 在此示例中,分布不均匀,原则上不是很好。

以下是用于内存回收技术的服务器统计信息的摘要:

PSHARE / MB是TPS统计信息;

SWAP / MB-交换使用统计;

ZIP / MB-内存页面压缩统计信息;

MEMCTL / MB-气球驱动程序使用情况统计。

对于单个VM,我们可能对以下信息感兴趣。 我隐藏了VM名称,以免使观众感到尴尬。 如果ESXTOP指标与vSphere中的计数器相同,则引用相应的计数器。

MEMSZ是在VM(MB)上配置的内存量。
MEMSZ = GRANT + MCTLSZ + SWCUR +不变。

授予-以MB为单位授予。

TCHD-以MB为单位。

MCTL? -已安装在VM Balloon驱动程序上。

MCTLSZ-气球大小(MB)。

MCTLGT是ESXi希望通过气球状驱动程序(Memctl目标)从VM中删除的RAM(MB)量。

MCTLMAX -ESXi可通过气球状驱动程序从VM删除的最大RAM(MB)量。

SWCUR-从交换文件分配给VM的当前RAM(MB)量。

SWGT -ESXi希望从交换文件(交换目标)提供VM的RAM(MB)量。

同样,通过ESXTOP,您可以看到有关NUMA VM拓扑的更多详细信息。 为此,选择字段D,G:



NHN -VM所在的NUMA个节点。 在这里,您可以立即注意到不适合一个NUMA节点的宽虚拟机。

NRMEM-虚拟机从远程NUMA节点占用的内存量(兆字节)。

NLMEM -VM从本地NUMA节点占用多少兆内存。

N%L-本地NUMA节点上VM内存的百分比(如果小于80%,则可能会出现性能问题)。

虚拟机监控程序上的内存


如果虚拟机管理程序上的CPU计数器通常不是特别重要,则内存情况与之相反。 VM上的高内存使用率并不总是表示性能问题,但是虚拟机监控程序上的高内存使用率只会启动内存管理技术人员,并导致VM的性能出现问题。 必须监视主机内存使用情况警报,并且不允许VM输入交换。





交换


如果VM陷入Swap,其性能将大大降低。 在主机上出现可用RAM之后,膨胀和压缩跟踪很快消失,但是虚拟机不急于从Swap返回服务器RAM。
在ESXi 6.0之前,使VM脱离Swap的唯一可靠且快速的方法是重新启动(更确切地说,关闭/打开容器)。 从ESXi 6.0开始,出现了一种不太正式但可行且可靠的使VM脱离Swap的方法。 在其中一个会议上,我设法与负责CPU Scheduler的一名VMware工程师进行了交谈。 他确认该方法非常有效且安全。 根据我们的经验,也没有注意到他的问题。

Duncan Epping 描述了从Swap输出VM的实际命令。 我将不重复详细描述,仅给出其用法示例。 从屏幕快照中可以看到,在VM上执行指定的Swap命令后的一段时间消失了。



在ESXi上管理RAM的提示


最后,我将提供一些提示,以帮助您避免由于RAM而导致的VM性能问题:

  • 避免过量生产集群中的RAM。 始终建议在群集中拥有约20-30%的可用内存,以使DRS(和管理员)有操作余地,并且在迁移期间VM不会进入交换。 也不要忘记容错的余量。 当一台服务器发生故障并且使用HA重新引导VM时,某些计算机也进入“交换”状态,这是不愉快的。
  • 在高度整合的基础架构中,请尝试不要创建主机内存超过一半的虚拟机。 同样,这将帮助DRS在群集服务器之间分配虚拟机而不会出现任何问题。 当然,此规则不是通用的:)。
  • 当心主机内存使用情况警报。
  • 不要忘记将VMware Tools放在VM上,并且不要关闭Ballooning。
  • 考虑在VDI和测试环境中启用VM间TPS并禁用大页面。
  • 如果VM遇到性能问题,请检查它是否正在使用远程NUMA节点中的内存。
  • 尽快使虚拟机脱离交换! 除其他外,如果VM处于交换状态,则显而易见的原因是,存储系统会遭受损失。

仅此而已。 以下是为那些想深入研究细节的人提供的相关文章。 下一篇文章将专门讲这个故事。

Source: https://habr.com/ru/post/zh-CN455820/


All Articles