KVM内存交换策略

日期: 2014-12-24 作者:Sander van Vugt翻译:张冀川 来源:TechTarget中国 英文

计算公式看起来很简单:一台KVM主机配置了16GB内存,如果每台虚拟机的内存大小为512MB,那么你最多应该能够运行32台虚拟机。然而通过应用某些技巧,可以优化内存使用并能够在物理服务器上运行更多的虚拟机。 首先,你需要记住从hypervisor的角度看,一台KVM虚拟机仅仅是一个Linux进程,这意味着其遵循有关虚拟以及常驻内存的通用法则。当KVM虚拟机启动时,KVM虚拟机设置指向虚拟内存地址的指针。

然而虚拟内存并非物理内存,仅仅是允许进程设置指针指向的地址空间。一般来讲,一个进程正在使用的虚拟内存的具体大小并不重要。 虚拟机处于活动状态时,hypervisor会为其分配常驻内存,常驻内存大……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

计算公式看起来很简单:一台KVM主机配置了16GB内存,如果每台虚拟机的内存大小为512MB,那么你最多应该能够运行32台虚拟机。然而通过应用某些技巧,可以优化内存使用并能够在物理服务器上运行更多的虚拟机。

首先,你需要记住从hypervisor的角度看,一台KVM虚拟机仅仅是一个Linux进程,这意味着其遵循有关虚拟以及常驻内存的通用法则。当KVM虚拟机启动时,KVM虚拟机设置指向虚拟内存地址的指针。然而虚拟内存并非物理内存,仅仅是允许进程设置指针指向的地址空间。一般来讲,一个进程正在使用的虚拟内存的具体大小并不重要。

虚拟机处于活动状态时,hypervisor会为其分配常驻内存,常驻内存大小等于虚拟机真正使用的内存大小。非常有趣的事儿是虚拟机正在使用的内存(图1)与分配给虚拟机的常驻内存(图2)并不存在一对一关系。
图1:虚拟机内存使用情况
图2:KVM主机内存分配情况

正如你所看到的那样,测试虚拟机已使用的内存值为238MB,但主机操作系统预留的常驻内存值要更大。然而这并没有什么关系,重要的是虚拟机使用的常驻内存大小低于分配给虚拟机的内存大小。

使用交换内存


影响一台服务器能够承载的虚拟机数量的另一个关键因素就是磁盘交换空间使用情况,Linux内核追踪被分配的内存是否正在被高效地使用。你可以通过/proc/meminfo文件获得内存使用情况,部分内容如下:

Active:           2097832 kB
Inactive:        1136816 kB
Active(anon):           1537524 kB
Inactive(anon):        101456 kB
Active(file):              560308 kB
Inactive(file):           1035360 kB

活动内存应该是可供使用的内存,非活动内存指的是最近未被使用的内存,可以被交换出去。作为一名管理员,你应该观察一段时间内有关活动内存以及非活动内存的统计数字。确保服务器交换空间大小至少等于你已经观察到的非活动内存的最大值,因为内存交换区可以而且能够被所有虚拟机使用。

在使用内存交换区时,你也应该确保活动内存没有被交换,因为活动内存被交换将影响虚拟机性能,所以虚拟机的活动内存应该位于内存中而不是在磁盘交换空间中。通过使用vmstat命令可以确认活动内存是否在被交换。例如运行vmstat 2 10命令,每隔两秒钟显示内存使用情况,共循环10次。确保你查看了SI和SO(换入/换出)统计数字,如果这些统计数字非常高那么这并是一个好的征兆。

OOM和内存交换


你还应该监控服务器以确保没有出现内存不足(OOM)的情况。如果分配给所有虚拟机的内存容量多于内存及可用交换空间之和,那么就会发生内存不足的情况。最开始你可能能够成功运行更多的虚拟机,但当虚拟机变得原来越活跃时,需要的内存也就越多,这可能会导致内存不足。

内存出现不足时,进程会被随机终止,这可能意味着虚拟机可能会发生故障。避免内存不足并不困难,一定要确保分配给虚拟机的虚拟内存的总大小少于内存的总大小与交换空间之和。

使用KSM共享内存


优化KVM内存使用的另一种方法是通过运行内核相同页合并(KSM)。KSM守护进程监控内核共享的内存并试图观察虚拟机内使用的共享内存,例如当多台服务器运行同一个操作系统时就会发生内核相同页合并,KSM确保该操作系统只会被加载一次并在虚拟机之间共享。

虽然KSM能够显著减少运行虚拟机所需要的内存大小,但可能会导致CPU负载变得更高,因此要监控进程以确保不会导致出现性能问题。

因为Linux内核能够高效地区分活动内存及非活动内存,可以有效地使用交换分区优化KVM虚拟机的内存需求,但要确保分配给所有虚拟机的内存总大小与主机内存的总容量与可用的交换空间相适应。KSM可能有助于将内存需求降至最低,但你应该当心没有导致任何性能问题。通过使用这些标准的Linux内核解决方案优化KVM虚拟机使用的内存,你应该能够在物理服务器上运行更多的虚拟机。无论如何,先要确保你有足够多的交换空间。

翻译

张冀川
张冀川

TechTarget中国特约专家,任职于某国企信息中心,负责数据中心硬件基础设施及信息系统运维管理工作,对虚拟化及云计算技术有浓厚兴趣,并在工作中积极应用

相关推荐

  • VMware快照工作原理以及如何运用

    当你更新或修复应用程序和服务器时,VMware快照无疑是你的救星。而如果你负责监管虚拟环境,你更是应该知道什么 […]

  • 回顾年度9大虚拟化技术

    虚拟化管理员从未放弃追寻更好虚拟化技术,以使他们的工作更快、更易于管理以及更好地优化。 我们看到,虚拟化工具在 […]

  • 配置ESXi Autostart,自动打补丁

    顾名思义,VMware ESXi Autostart能够实现自动开启、关闭ESXi服务器上的虚拟机,让虚拟机管理变得更轻松。如果运行了多个虚拟机并且给主机打补丁后需要重启主机,那么ESXi Autostart的作用就更大了,没有Autostart的话,你需要在给主机打补丁后,手动重启每个虚拟机。

  • 推荐一款好的虚拟主机提供商

    推荐一款好的虚拟主机提供商 推荐理由:   第一:种类多:有经济型,全能型,功能型等   […]