再议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,如需转载请自行联系原作者

目录
打赏
0
0
0
0
143
分享
相关文章
Java内存管理深度剖析:从垃圾收集到内存泄漏的全面指南####
本文深入探讨了Java虚拟机(JVM)中的内存管理机制,特别是垃圾收集(GC)的工作原理及其调优策略。不同于传统的摘要概述,本文将通过实际案例分析,揭示内存泄漏的根源与预防措施,为开发者提供实战中的优化建议,旨在帮助读者构建高效、稳定的Java应用。 ####
61 8
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
61 1
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
80 6
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
573 0
【C++篇】深入内存迷宫:C/C++ 高效内存管理全揭秘
【C++篇】深入内存迷宫:C/C++ 高效内存管理全揭秘
189 3
|
5月前
|
深入了解MySQL内存管理:如何查看MySQL使用的内存
深入了解MySQL内存管理:如何查看MySQL使用的内存
698 1
|
6月前
|
在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?
【9月更文挑战第25天】在ArkTS中,有效进行内存管理并避免内存泄漏的方法包括:及时释放不再使用的资源,如关闭监听器和清理定时器;避免循环引用,通过弱引用打破循环;合理使用单例模式,确保单例对象正确释放;及时处理不再使用的页面和组件,在卸载时清理相关资源。
223 9
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
JVM自动内存管理之运行时内存区
这篇文章详细解释了JVM运行时数据区的各个组成部分及其作用,有助于理解Java程序运行时的内存布局和管理机制。
JVM自动内存管理之运行时内存区