再议Hyper-V 动态内存管理和内存过量使用

简介:

再议Hyper-V 动态内存管理和内存过量使用

       实际操作中,慢慢成长起来的经验将会成为一份可遇而不可求的金玉。几年前,坚信虚拟化将会让我们的IT运维变得随心所欲,到现在我反而发现了这项全新业务的管理让我们常常犯下新的错误。因为家庭中的一些琐事,我退出了MVP连任申请(虽然已经连续3+1年享受这一荣耀),但我发现这和老方所来信中提供得那样:“这并不意味着离开,我随时会回来”。很早以前写过一篇《用一份PPT开始你的Hyper-v虚拟化之旅》,我想还是应该延续接下来的讨论。

内存过量和动态内存都是在追求虚拟机密度最大化

       我们知道,在一个虚拟化的服务器环境中,缺乏足够的物理内存,将会直接影响到虚拟机的设计密度,而设计时我们会将迁移所用的物理内存技术器精确到MB,当然这肯定还会影响到整个系统的投资回报率,内存成了虚拟化的短板。而后,我发现vSphere开始提供内存过量使用技术,这项技术可以让VMware虚拟机使用超过物理主机实际的内存容量,而虚拟机的位置又可以根据业务时段的不同,在不同的父分区下蹭吃蹭喝。但慢慢的,我开始关注这项前所未有的虚拟特性,这是因为与之相比的机械磁盘速率实在低下,当使用过多的虚拟内存之时,虚拟机的性能直线下降,而这恰恰是我们在引入虚拟化之前尽量避免的一种错误设计。

       还记得首次听到“内存过量使用”这个术语时,有人大胆的提出了几份观点,但谁料想这些可能会引发今天挨板砖的局面。“内存过量使用”这个术语让人曾经让不熟悉虚拟化的人们有一种误解,“内存溢出”?因为过量使用似乎意味着过度利用资源。实际上,其想法是,即便没有物理内存来支持为系统配置的资源,也可以创建通常需要一定数量内存的多个虚拟机。基本上,借助内存过量使用技术,分配给物理主机上多个虚拟机的内存数量可以超过主机上的物理内存数量,这允许物理主机上可以有更大的虚拟机密度。

        动态内存(Dynamic Memory)是微软Hyper-V R2 SP1让人鸡冻的新增功能,由于改进了虚拟内存分配的机制,这便同样可以增加虚拟机和主机之间的比率,也就是虚拟机密度。但毋容置疑,缺少软件厂商的支持策略,比如一些黑心的应用程序仍然会扩大其内存需求,捆绑硬件来销售,这些都可能限制这一优势的发挥。
 

一些唠叨和建议


        非常赞同Brien Posey(MVP)说的:“Hyper-V 的内存管理是一种艺术!”
动态内存应该是一项创举,但必须遵守微软的Hyper-V最佳实践指南,以避免虚拟机缺少内存管理的艺术。我在查阅了kb and lib资料并进行了有针对性的测试之后,希望以下几点能对你的工作有些帮助:

        当Hyper-V动态内存在一个虚拟机上被启用以后,这个虚拟机能立刻断定它需要多少内存。然后主机分配给虚拟机要求的数量,以及一些额外的容量来作为缓冲,如图片中的“内存缓冲区”。如果一个主机中有多个虚拟机在运行,主机会自动在所有虚拟机间平衡内存的分配,图片中的“内存权重”。
 

      

应该说,动态内存有时并非总是最佳选择。有些虚拟机我们应该禁用动态内存,把这些资源基于哪些根据应用程序特性可真正获益的虚拟机上启用动态内存,这一点非常重要。除非你对于分析运行性能指标方面非常在行,正确分配这些值是异常困难的。可以演示软件或使用负载测试工具去决定真实的内存需求,但是仍然有一些未知事件因为不是在生产环境,所以你需要长期摸索去使用动态内存容量规划。
例如,如果 配置windows server 2008 TS 网关采用NAP 方案  ,TS Server和NPS可能在夜里需要非常多的内存,这是相反的业务峰值时间(回家加班的人还是很多,唉),内存需求快速下降。
 

还比如,对于一个虚拟的DNS或者AD主机,当它只需要512MB内存的时候,却被分配了2GB内存,你就在浪费宝贵的主机资源了。但如果这是一台我在DELL访谈中 (《如何开启你的虚拟化之路》)提到的学籍管理服务器,因为只是入选和离校时才达到高峰期,动态内存绝对是最佳的设计选择。

 

还比如,有些SQL数据库采用动态内存的这个行为加快了数据库处理大量查询信息时的速度,并且在静态分配的世界中是可行的。可是对于动态内存分配来说,过量使用和动态内存绝对都会遇到一个问题:前面提到的磁盘速度和内存速度的对比。这些程序在非峰值时间你可能会看到内存水平下降,但是内存减少很可能性很少。因此,一些调用大型SQL数据库的程序,你可以使用Hyper-V动态内存的最大内存设置来限制虚拟机的内存。你也可以在SQL数据库中限制内存的消耗,当然,最好的做法是改善程序调用机制,或者采用“应用程序级别”来控制它们,而非是动态内存技术。
 
非常感谢王淑江老师这段时间和对我在动态内存技术使用时的帮助和探讨,下面是他的blog  http://wangshujiang.blog.51cto.com ,而后续我也将把如何计算动态内存公式和见解继续分享。是不是完成Hyper-V R2这本书,我一直在犹豫。














本文转自张琦51CTO博客,原文链接:http://blog.51cto.com/zhangqi/803463,如需转载请自行联系原作者

相关文章
|
1天前
|
程序员 编译器 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
5 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
|
1天前
|
C语言 C++
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(中)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
9 0
|
1天前
|
编译器 数据库 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
9 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(上)
|
3天前
|
算法 Java Python
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性。优化包括避免过多临时对象,如优化列表推导式减少对象创建。警惕循环引用造成的内存泄漏,如示例中的Node类。使用`gc`模块检测泄漏,通过`gc.set_debug(gc.DEBUG_LEAK)`和`gc.collect()`获取信息。实践中需持续分析内存使用,优化算法、数据结构和资源释放,以提升程序质量与效率。
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
|
3天前
|
存储 Java 程序员
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性,包括变量存储和垃圾回收。变量存储时,如`x = 10`,`x`指向内存中值的引用。垃圾回收通过引用计数自动回收无引用对象,防止内存泄漏。了解此机制可优化内存使用,避免循环引用等问题,提升程序效率和稳定性。深入学习内存管理对成为优秀Python程序员至关重要。
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
|
5天前
|
编译器 C语言
动态内存的管理(内存储存的god)
动态内存的管理(内存储存的god)
10 0
|
6天前
|
JavaScript 前端开发 算法
JavaScript的垃圾回收机制通过标记-清除算法自动管理内存
【5月更文挑战第11天】JavaScript的垃圾回收机制通过标记-清除算法自动管理内存,免除开发者处理内存泄漏问题。它从根对象开始遍历,标记活动对象,未标记的对象被视为垃圾并释放内存。优化技术包括分代收集和增量收集,以提升性能。然而,开发者仍需谨慎处理全局变量、闭包、定时器和DOM引用,防止内存泄漏,保证程序稳定性和性能。
19 0
|
7天前
|
存储 程序员
LabVIEW性能和内存管理 7 LabVIEW中局部和全局变量的内存分配
LabVIEW性能和内存管理 7 LabVIEW中局部和全局变量的内存分配
|
7天前
|
安全 Python Linux
Kali Linux下Volatility2.6常见问题疑难杂症-内存取证信息安全管理与评估
Kali Linux下Volatility2.6常见问题疑难杂症-内存取证信息安全管理与评估
Kali Linux下Volatility2.6常见问题疑难杂症-内存取证信息安全管理与评估
|
6天前
|
内存技术
深入理解操作系统:内存管理与虚拟内存
【4月更文挑战第30天】本文深入探讨了操作系统中的关键组成部分——内存管理,并详细解析了虚拟内存的概念、实现机制及其在现代计算系统中的重要性。我们将从物理内存的分配和回收讲起,逐步引入分页、分段以及虚拟地址空间等概念。文章旨在为读者提供一个清晰的框架,以理解内存管理背后的原理,并通过具体示例加深对虚拟内存技术的理解。