通过扩展内存解决vSphere性能问题虚拟化

2014-07-11    来源:TechTarget中国    编辑:王学强
vSphere的内存性能管理只和资源池相关。如果池中的资源用尽,那么性能就会受到影响。扩展资源池或者减少非必要消耗可以帮助提升性能表现。

  vSphere的内存性能管理和其他资源的性能管理不尽相同,其只和资源池相关。如果池中的资源用尽,那么性能就会受到影响。扩展资源池或者减少非必要消耗可以帮助提升性能表现。

  可以从以下四个层次来理解内存资源池:

  •为单台虚拟机分配的内存
 •为所有虚拟机分配的vSphere资源池
  •ESXi主机上安装的物理内存
  •DRS集群中的总物理内存

  每一层的内存资源都有可能被完全耗尽,导致虚拟机性能下降。

  如何监测虚拟机内存是否耗尽

  从根本上来说,这里所讨论的性能指的是虚拟机(VM)上运行的应用程序。为虚拟机分配的内存指的是操作系统——也就是应用程序——能够使用的最大容量。从这个角度来说虚拟机和物理服务器并没有区别。如果操作系统中的所有内存都被耗尽,其就将开始使用硬盘中的页面文件作为内存的补充。

  为了防止问题发生,可以修改应用程序使用更少的内存或者为虚拟机分配更多的内存。监测虚拟机内存是否耗尽的最好方式是使用虚拟机内的内存监控工具,和在物理机上的操作方式相同。

  图1显示一个应用程序占用了这台Windows虚拟机的所有物理内存。这是一个可以通过为虚拟机分配更多内存而提升性能表现的典型例子。在这个截图中,虚拟机使用了1.2GB内存,但是实际上只为虚拟机分配了1GB内存。只需简单地将分配的内存提高到1.5GB就可以极大地提升性能表现。

图1. 增加内存可以帮助提升Windows虚拟机性能表现

  需要注意的一个潜在问题是vmmemctl,一种内存balloon driver。这种驱动是VMware Tools的一部分,被用于从虚拟机中回收内存。如果ballooning导致虚拟机内存紧张,就应该通过检查ESXi服务器来解决问题。

  性能取决于内存回收情况

  ESXi允许内存过度分配,因此,ESXi服务器的内存总量有时会小于所有虚拟机分配的内存之和。如果ESXi主机想要使用更少的内存来运行虚拟机,将会从虚拟机回收物理内存。Ballooning和VMkernel swapping技术降低了虚拟机占用的物理内存。vSphere性能监视图可以很好地显示ballooning和swapping情况;如果虚拟机的其中一个数据不是零,就证明这台虚拟机没有获得所有分配的物理内存。如果只回收少量内存,对于性能的影响将会非常小。但是如果从虚拟机和应用程序回收大量内存,那么应用程序将会受到很大影响。

  在图2中,你可以看到为虚拟机配置了多种回收内存回收方式。工作负载始终保持不变,一个简单的应用程序占用了为虚拟机分配的1GB内存的98%。开始,所有的虚拟机内存都是物理内存,琥珀色的“Granted”线表示为虚拟机分配了1GB物理内存。在图表的中间部分,ballooning技术回收了大量的内存。“Granted ”下降到了450MB,而“ballooned ”上升到了574MB——不再分配给虚拟机的那部分内存就是被ballooning回收了。最后,内存被大量回收,ballooning开始出现不足,并且开始使用VMKernel swapping。最后“Granted ”终结在50MB,“ballooned ”为650MB,而“swapped” 为128MB。

图2. 一台被回收大量内存的虚拟机的性能图表

  而这台虚拟机上所有的应用程序都将会遇到很大的性能问题。在图3中,查看虚拟机的内部情况,虽然和第一个图表中的负载情况完全相同,但是我们看到了很大变化。内存的使用超过了1.5GB。因为要进行很多页面交换任务,所以CPU的使用率相当高。

图3. Windows虚拟机需要进行很多页面交换任务,导致CPU使用率升高。

  为什么要回收内存

  通常导致需要回收内存的原因在于ESXi服务器的所有物理内存都被占用。因为ESXi服务器的内存总量是固定的,所以不得不在一组虚拟机间共享内存。在ESXi服务器开始从虚拟机回收内存之前,通常你会在ESXi服务器上的“主机内存使用情况”中看到一条vCenter告警。解决方案是关闭一部分虚拟机或者将虚拟机迁移到其他ESXi服务器上。

  需要注意虚拟机的内存限额——也就是ESXi服务器能够为虚拟机分配的物理资源的极值。一台配置了内存限额的虚拟机即便是ESXi仍然有空闲内存,也将会开始回收内存。限额的值越低,从虚拟机回收的内存就越多。不建议为虚拟机配置内存限额,因为可能会导致巨大的性能问题。

  了解DRS集群中的工作负载

  DRS集群是一组共同运行虚拟机的ESXi服务器集合。集群必须拥有足够的总资源来运行所有虚拟机,虚拟机必须能够通过vMotion方式转移到任何其他主机上。如果集群中的所有主机的内存使用率都很高,那么你必须升级主机的内存,或者减少虚拟机对于内存的需求。如果只有一台主机遇到内存使用率较高的情况,或者只有一台没有遇到这种问题,那么也许就是主机的配置问题了。如果虚拟机不能通过vMotion迁移到或者迁移出这台主机,那么DRS就不能实现负载均衡。确保集群中的所有主机都连接到同一个数据存储和网络当中,以及拥有相同型号的CPU。最简单的测试方式就是使用vMotion将一台高负载虚拟机迁移到其他主机上,查看是否会出现错误。

  内存管理就像其他的性能管理方式一样,会存在多种影响因素,你需要对负载进行深入了解。如果为虚拟机分配的内存不足,将会导致其产生严重的性能问题。良好的配置意味着一个DRS集群为很多虚拟机提供了一个大的资源池。详尽的监控和良好的规划意味着集群永远不会出现内存不足的情况,用户也会感到满意。

1
3