一台服务器能够支持的虚拟机数量通常取决于物理硬件所能够提供的可用计算资源。大多数资源, 比如处理器周期、存储I/O和网络带宽等,都能够相对简单地进行共享。这种做法的原理在于负载并不总是处于忙碌状态,因此共享——或者过度使用——资源能 够实现更高等级的负载整合,因此为虚拟机分配的资源总量和可以超过当前物理资源的总数量;就算在特殊情况下出现问题,也只不过是对负载性能产生轻微影响。 然而 ,服务器内存一直以来都被视为一种固定资源。由于每台运行在内存当中的虚拟机都是应用程序和数据集合的完整镜像,因此为所有虚拟机提供足够的内存资源是十 分重要的。否则,服务器将不得不使用硬盘上的交换文件(swap file)来补充内存空间——但是通常这种方式会对虚拟机的性能造成极为严重的影响。但是随着内存过度使用和内存共享技术的出现,这种情况正在发生改变。 借助于内存过度使用技术,主机服务器所分配的内存数量可以超过现有的物理内存数量。比如,假设一台主机服务器拥有4GB物理内存,那么借助于内存过度使用 技术也许可以创建六台内存为1GB的虚拟机。乍看之下,这是一种非常危险的方式,因为两种负载不能同时共享相同内存地址空间当中的不同数据片——至少在将 数据交换到硬盘之前是不可以的。 但是设计者很快意识到许多虚拟机并不会使用为其分配的全部内存空间,导致部分内存空间基本上被浪费了,因为一直处于空闲或者未使用状态。 Hypervisor能够寻找处于空闲状态的内存,并且将其提供给需要使用的虚拟机。如果没有其他虚拟机需要额外的内存,那么这些空闲空间可以被用来创建 新的虚拟机。可以在“共享(Shares)”虚拟内存配置当中定义虚拟机在内存池当中的优先级,并且还可以通过“预留(Reservation)”机制定 义虚拟机能够使用的最小内存空间,保证虚拟机拥有足够内存以正常运行。 虚拟机还能够共享大量内容。比如,上面提到的六台1GB内存虚拟机全部运行Windows Server 2012 R2,其中两台虚拟机运行相同的业务应用。那么在这种情况下,五台Windows Server 2012 R2和一个应用程序就是冗余的。内存共享技术允许不同虚拟机使用相同内存页面当中的一个通用实例。这样就能够减少虚拟机需要使用的内存总数量,并且支持更 高等级的过度使用。内存共享技术的实现方式非常类似于硬盘存储当中的数据去重复化机制。 需要特别注意的是内存过度使用和内存共享都是高度动态的技术,会受到总计算负载和通用内容数量的影响。比如,很少使用的虚拟机能够为内存过度使用释放大量 内存空间,但是随着虚拟机使用频率的增加和内存需求的增长,hypervisor必须将这些内存返还给虚拟机,否则就会面临使用硬盘交换文件所带来的性能 问题。类似地,使用不同操作系统版本、应用程序和数据的虚拟机也许只有很少能够共享的通用内存页面。虚拟机迁移和负载均衡会改变通用内存页面,对内存共享 产生影响。

TechTarget中国原创内容,原文链接: http://www.searchvirtual.com.cn/showcontent_92654.htm
© TechTarget中国:http://www.techtarget.com.cn

内存压缩PK页面交换 解决内存问题谁更在行的更多相关文章

  1. linux内存源码分析 - 内存压缩(同步关系)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 最近在看内存回收,内存回收在进行同步的一些情况非常复杂,然后就想,不会内存压缩的页面迁移过程中的同步关系也 ...

  2. linux内存源码分析 - 内存压缩(实现流程)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 本文章最好结合linux内存管理源码分析 - 页框分配器与linux内存源码分析 -伙伴系统(初始化和申请 ...

  3. Android 如何有效的解决内存泄漏的问题

    前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...

  4. C#内存压缩zip文件

    C#中我们使用比较多的文件压缩第三方DLL就是Ionic.Utils.Zip.dll.但是这个DLL只支持对现有文件进行压缩,而不支持内存压缩,如果需要使用内存压缩,那么有第三方DLL ICSharp ...

  5. [转]Android 如何有效的解决内存泄漏的问题

    Android 如何有效的解决内存泄漏的问题   前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的 ...

  6. linux内存优化之手工释放linux内存

    先介绍下free命令 Linux free命令用于显示内存状态. free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等. 语法: free [- ...

  7. 内存与IO的交换【转】

    用户进程的内存页分为两种: file-backed pages(文件背景页) anonymous pages(匿名页) 比如进程的代码段.映射的文件都是file-backed,而进程的堆.栈都是不与文 ...

  8. VMSTAT监控CPU使用率,内存使用,虚拟内存交换情况

    Linux性能监控分析命令(一)—vmstat命令详解 一.vmstat介绍 语法格式: vmstat [-V] [-n] [-S unit] [delay [count]] -V prints ve ...

  9. SetProcessWorkingSetSize() 方法使内存降低了很多(把内存放到交换区,其实会降低性能)——打开后长时间不使用软件,会有很长时间的加载过程,原来是这个!

    在项目中对程序性能优化时,发现用SetProcessWorkingSetSize() 方法使内存降低了很多,于是查阅了相关的资料如下: 我的程序为什么能够将占用的内存移至虚拟内存呢? 其实,你也可以, ...

随机推荐

  1. 解决ubuntu的chkconfig[/sbin/insserv 无法找到路径问题]

    http://www.cnblogs.com/lost-1987/archive/2012/10/17/2727285.html 今天在虚拟机里做DRBD实验,使用chkconfig管理服务的时候,出 ...

  2. IOS开发入门你们准备好了吗?

    我们对于IOS的了解最多应该就是苹果手机独有的IOS系统吧,也可以说是单任务管理器,这可以说是一个优势,但是随着技术提升IOS慢慢有被超越的趋势,但是很多大公司还是需要这方面的开发人才,那么今天我们来 ...

  3. Django基础--3

    ORM django一对多的操作 获取表单的三种方式:views 获取对象            .all()      html中获取方式为 row.id,row,host 获取字典         ...

  4. MySQL 中while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  5. 浅谈Docker

    一.为什么使用Docker 软件开发最大的麻烦事之一,就是环境配置.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把原始环境一模一样地复制过来. 目前有两个主流解决方 ...

  6. ios核心动画(基础动画)

    一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为du ...

  7. iOS第三方支付(支付宝)

    使用支付宝进行一个完整的支付功能,大致有以下步骤: 与支付宝签约,获得商户ID(partner)和账号ID(seller) 下载相应的公钥私钥文件(加密签名用) 下载支付宝SDK 生成订单信息 调用支 ...

  8. 使用Hbuild打包APP

    前端开发APP,从HBuilder开始~   内容简介 介绍目前前端人员开发app的几种方法,具体介绍hbuilder开发app,一扇赞新的大门~ 无所不能的js 最开始js仅仅局限于网页上一些效果, ...

  9. Python的静态方法和类方法

    Python中使用@staticmethod这个装饰器让方法变为静态方法 一:定义 @staticmethod: 首先它是一个装饰器,被装饰的方法不需要隐含的参数,对象和对象的实例都可以调用静态方法 ...

  10. 基于mybatis设计简单信息管理系统2

    1.空指针异常 public class CanvasServlet extends HttpServlet { private CanvasService canvasService; privat ...