浅析VMware虚拟化平台内存管理

虚拟化平台三种内存模式
a.主机物理内存(Host Physical Memory)
主机物理内存是ESXi在一个物理主机上检测到的内存值,该值是主机实际物理安装的内存值。例如,一台X86服务器配置16根32GB内存,则该主机的物理内存为512GB。
b.虚拟机物理内存(Guest Physical Memory)
登陆虚拟机操做系统能够看到分配给虚拟机的内存,例如建立虚拟机的时候分配4GB内存,则操做系统能识别到4GB内存,这就是虚拟机物理内存
c.虚拟机虚拟内存(Guest Virtual Memory)
是指虚拟机操做系统分配给应用程序的可用内存,这是虚拟机操做系统映射到虚拟机物理内存的虚拟内存地址空间,是虚拟机操做系统提供给他的应用程序使用的内存地址空间,在非虚拟化环境中也是如此。
2,内存三种模式的工做方式
下图显示了三层内存的相互映射方式,虚拟机虚拟内存映射到虚拟机物理内存,虚拟机物理内存被虚拟机管理器(hypervisor)映射到ESXi主机物理内存。
浅析VMware虚拟化平台内存管理
举例说明:若是你有一个虚拟机,在虚拟机里面开启一个微信应用程序,微信若是想要运行就会向虚拟机索要内存,虚拟机会提供内存给微信应用使用,这个时候内存的流向是Guest virtual memory 向 guest physical memory申请内存。此时,虚拟机管理器会收到guest physical memory向Host physical memory申请内存,申请完成后微信应用程序才能正常运行。总结一下就是一个ESXi主机为其上运行的每一个虚拟机建立一个虚拟内存地址空间,这些虚拟内存地址空间向下映射到主机内存地址,向上映射到虚拟机做为虚拟机的物理内存。当微信使用完后,虚拟机会将这部份内存标记为“free”,此时其余应用程序可使用这部份内存,可是虚拟机管理器不会关心这些被标记为“free”的内存,而且认为这些内存一直分配给了虚拟机。也就是说,一旦管理程序将内存分配给一个虚拟机,它没办法分辨分配给虚拟机的内存是被虚拟机操做系统分配给了应用程序仍是已经被释放。因此当虚拟机的操做系统释放虚拟机物理内存时,管理程序不能从虚拟机回收主机物理内存。下图表示了这种属性。
浅析VMware虚拟化平台内存管理
有人会问若是这样的话,虚拟机会不会一直请求内存,可是一直不释放,形成物理内存占满的状况。实际上是不会出现这种情况的,当一个虚拟机分配的虚拟机物理内存已被彻底占用时,管理程序不会再向虚拟机分配更多的物理主机内存,即便内存限制设置为无限制。
3.虚拟机的内存回收
内存分配容易回收难,由于内存回收的时候,管理程序必须必须保留足够的物理主机内存来支持虚拟机物理内存分配和虚拟机运行的内存开销。可是在平常工做中咱们常常会遇到ESXi主机内存过量分配的状况,ESXi经过使用透明页共享(Transparent Page Sharing)、内存膨胀(Ballooning)、管理程序内存交换(hypervisor swapping)及内存压缩(memory compression)等机制保证能使内存过量分配。
a.透明页共享
当ESXi主机运行多个虚拟机时,这些虚拟机可能已加载相同的应用程序或组件,或者包含公用数据。使用透明页共享技术能够消除内存页的冗余副本,只保留一份,其他的内存能够从新分配给其它虚拟机。
b.内存膨胀
如上所述,当虚拟机的客户操做系统释放内存时,ESXi不能简单地回收主机物理内存页,虚拟机操做系统也不知道ESXi主机内存的真实使用率。当ESXi主机内存处于压力状态时,主机能够经过内存膨胀机制来回收虚拟机的物理内存页,触发内存膨胀的驱动程序在安装vmware tools的时候已经安装在操做系统中,驱动程序的名称为vmmemctl。
浅析VMware虚拟化平台内存管理
虚拟机操做系统内存膨胀
当主机的物理内存处于压力状态,主机须要从虚拟机中回收物理内存时,管理程序会给vmmemctl设置一个须达到的目标值,vmmemctl收到目标值后,虚拟机首先将被标记为“free”的内存“填充气球”,若是这些被标记为“free”的内存不能知足的状况下,可能触发内存交换的状况,以达到须要回收目标值。最理想的状态是,在不进行内存交换的状况下就能知足目标值,这样就不会影响虚拟机的性能。为了不在进行内存交换的时候有能够交换的磁盘可用,因此在虚拟机进行配置时,要有足够的交换空间。固然也能够设置限制可以使用内存膨胀回收的内存量,甚至能够禁用内存膨胀,可是通常状况下不建议这样作,由于内存膨胀是在保障虚拟机操做系统性能的状况下作出的选择,要比其余方式温柔的多,因此不建议禁用内存膨胀。
c.内存压缩
内存压缩就是指那些须要交换到磁盘的内存页不进行磁盘交换而是进行压缩,这种时候就是上面内存膨胀须要回收内存时,若是“free”内存不能知足回收的目标值,虚拟机会将不会内存交换到磁盘,在交换到磁盘以前管理程序会判断是进行压缩对虚拟机性能影响小,仍是进行交换对虚拟机性能影响小。并非全部的内存都适合压缩,若是一个内存页压缩比在50%以上,ESXi主机将会压缩这些内存。若是内存页压缩比在50%如下,则会经过管理程序将内存交换到磁盘。
d.管理程序内存交换
当ESXi主机使用透明页共享、内存膨胀、内存压缩等机制都不能回收内存时,才会使用管理程序内存交换。在进行内存交换时,管理程序不会判断虚拟机里面哪些内存适合交换,也就是说它不会判断页面对于虚拟机的重要程度,因此会随机选择内存页面进行交换,这就会对虚拟机形成不可预知的影响,内存交换到磁盘审核,也会严重影响虚拟机的性能。在ESXi5.5以上版本中能够设置SSD缓存交换,以较少对性能的影响。
4.使用什么机制进行回收?
根据ESXi主机实际可用内存量的不一样,ESXi有4种内存状态,分别是High、Soft、Hard以及Low,具体定义阀值以下表:
浅析VMware虚拟化平台内存管理
可使用esxtop命令查看当前处于哪一种状态。
浅析VMware虚拟化平台内存管理
主机内存处于不一样的状态,会触发相应的内存机制进行内存回收,具体以下表:
浅析VMware虚拟化平台内存管理
5.怎么知道内存是否存在性能问题?
查看内存的使用状况有不少种,你能够经过vSphere网页客户端进行查看,能够经过使用VMware vRealize Operations Manager,也能够经过esxtop命令进行查看。这里简单介绍下经过esxtop命令进行分析。
SSH登陆到ESXi主机,而后输入esxtop命令,输入m进入内存页面,默认5s中更新一次,可使用s来更改更新间隔(输入s会看到Seconds to delay: 输入你想要的刷新频率,单位为秒,而后回车确认),可使用f选择要查看的字段,具体详细命令能够参考官方手册,这里只介绍几个比较重要的参数及判断标准。
下图是一个输出截图
浅析VMware虚拟化平台内存管理
PMEM/MB
显示服务器的计算机内存统计信息
VMKMEM/MB
显示ESXi VMkernel的计算内存统计信息。这里面要重点注意主机的内存状态。当状态为Soft的时候说明要关注内存状况,说明主机已经存在内存压力。
PSHARE/MB
显示ESXi页共享信息
SWAP/MB
显示ESXi交换使用量统计信息
r/s 由ESXi系统从磁盘换入内存的速率,若是该值大于0,主机物理内存量过量,主机尝试回收内存,而且仅仅经过内存膨胀这一机制没法知足
w/s 由ESXi系统将内存交换到磁盘的速率,若是该值大于0,可能主机物理内存已严重不足
ZIP/MB
显示ESXi内存压缩统计信息
MEMCTL/MB
curr,使用vmmemctl模块回收的物理内存总量
target,ESXi主机尝试使用vmmemctl模块回收的物理内存总量
max,ESXi主机可使用vmmemctl模块回收的最大物理内存量
若是该值比0大,或者主机内存过量,或者虚拟机已设置了一个比当前配置内存小的内存限制时,主机开始从虚拟机回收内存。
SWCUR 该资源或虚拟机当前使用的交换量
SWTGT ESXi主机预期资源池或虚拟机交换使用量的目标
SWR/s 同SWAP/MB里面的r/s
SWW/s 同SWAP/MB里面的w/s
SWCUR
表示当前使用内存交换交换到磁盘的内存量,若是该值大于0,主机物理内存吃紧,主机尝试回收内存而且仅仅经过内存膨胀一没法知足
CACHEUSD
当前内存压缩所使用的压缩高速缓存量,该值大于0表示主机正在进行内存压缩,主机内存不足
ZIP/s
主机内存压缩率,若是该值大于0,说明主机正在进行内存压缩
UNZIP/s
若是该值大于0,那么被压缩的内存正在被主机或者虚拟机访问,此时虚拟机性能将收到影响。转载至——明辰智航云安网络与虚拟化性能管理系统

































































html

相关文章
相关标签/搜索