我是第一次接触“内存超配”这个名词。看功能介绍描述,从字面上实在是不容易理解(怪自己水平不高)。然后就想简单了解下相关的内容(碎碎念,其实是奔着这本《深入理解计算机系统》去的)。搜索“内存超配”,依旧没看到我能看得懂的文档。
什么是内存超配(memory overcommit)? 简单来说:在一台设备上,设置有多个虚拟机,而给这些虚拟机设置的总内存容量超过了该设备的真实物理内存容量 举例: 一台设备具有48GB的内存,在我们的讨论中为了简化模型,我们将假设虚拟机管理程序不使用任何内存,并且每个虚拟机都没有内存开销。 现在,我创建了一台分配了4GB内存的虚拟机并加载它。在没有任何内存过量使用的情况下,我可以在该设备上创建12个虚拟机(每个虚拟机的内存都是4GB)。 其实你知道的,比如我们家里的电脑,你就算是配置了4GB的内存,也并不意味着这4G内存每时每刻都完全被利用。那么我们假设这些虚拟机通常就使用了2.5GB内存,只是有时它们会达到4GB。 通过“内存超配”,我现在可以在设备上创建19个4GB内存的虚拟机,从而分配总共76GB的内存,实际上我们真实需要的物理内存容量是19 x 2.5GB = 47.5GB。47.5GB看上去很接近48GB了,为了保守起见,那么我少创建2个虚拟机,也就是说我就创建17台虚拟机,此时所需要的物理内存的容量就是17 x 2.5GB = 42.5GB。通过内存超配,此时分配了17 x 4GB = 68GB的内存,因此68GB-48GB = 20GB是过量使用的内存。因此,我不必为这超出的20GB的内存而付费。
关于内存超配的【错误】观点(我挑那篇文章中我看的懂得写): 1.超配总会影响性能 我们要注意的是【错误】超配才会严重影响性能。例如一旦设备的物理内存不足使得要进行磁盘交换时,就会影响性能(我个人理解是,例如出现类似于使用到linux下的swap分区的情况)。我们应该不惜一切代价避免这种情况。 而对于【良好】的超配,对于性能影响将非常低
2.超配很危险 可以问自己一个问题:“你不监视自己在做什么吗?” 当我有一个一升的瓶子并且想要装满水时,我通常会监视我已经向其中注入了多少水,并在装满水之前停了下来。所以,即使在IT基础架构中,也可以在许多地方使用相同的做法。 我相信你会定期监控设备性能,并且会在超过限制前继续添加虚拟机。只要你知道自己在做什么,就没有危险。
我暂时没实际接触过内存超配,但是既然定期监控以及明确知道自己想干什么的话。那么内存超配功能还是值得使用的。有的管理员不一定能及时监控,建议是设备上要有报警功能,当怀疑可能出现故障时,最好能把信息发送到管理员手机或是微信上
|