在某些测试环境下我们经常使用 VMware Workstation 安装不同的操作系统来进行各种测试,大家都知道,如果同时使用多个操作系统的虚拟机来做测试时,机器响应将非常缓慢,经过一段时间的使用,我发现下面的一些优化步骤对提高 VMware Workstation 的运行速度有很大的帮助。
寄主操作系统的选择:
选择一个可靠的寄主操作系统, VMware Workstation 需要消耗大量的内存,因此一个稳定可靠的操作系统是必要的, WINDOWS 平台上,要支持大内存,能支持 4G 以上的内存的操作系统,不推荐 WINDOWS XP 这样的家庭级的操作系统, WINDOWS 2003 和 WINDOWS 2008 是一个较好的选择,要注意 WINDOWS 2003 32 位标准版只支持 4G 的内存,最好安装 32 位的企业版,如果使用 64 位的 WINDOWS ,虽然在支持大内存上没有问题,但是兼容性不大好,没有特别的要求的话,我建议使用 32 位 WINDOWS 2008 企业版操作系统。如果能接受 LINUX 操作系统,其实是更好的选择,除了图形界面不大友好外, LINUX 在内存管理,进程管理上要比 WINDOWS 操作系统要优秀得多,如果是专门的虚拟机可以考虑使用 VMware SERVER 操作系统从底层开始虚拟化。
充足的硬件资源:
尽可能为运行 VMware 的机器提供足够的硬件资源,这里最主要的资源是磁盘和内存,对于 CPU ,现在的绝大多数双核 CPU 可以满足 2 - 3 个虚拟机同时运行没有问题, CPU 利用率一般在 50 %以下。如果 CPU 支持 INTEL VT 或 AMD AMD-V 的虚拟化技术,可以在 BIOS 里打开,在 BIOS 里打开虚拟化选项,能较大提高虚拟机的性能, BIOS 里打开虚拟化技术,需要进行关机重启,否则热启动是无法生效的。
对于硬件的资源升级在有些情况下不一定能很容易实现,例如内存虽然很便宜,但是如果主板没有足够的槽来插还是不行的。
硬盘:
对于 VMware 来说,最影响性能的是磁盘的性能,因为所有的虚拟机文件都是放在寄生主机上的,因此在可能的情况下尽量提供多块硬盘,硬盘速度越快越好,如果能组建一个 RAID 来存放虚拟机的数据文件更好。有多个硬盘的情况下,建议将多个虚拟机的文件存放在不同的硬盘上,如果只有一个硬盘,如果可能,每个虚拟机可以单独占用一个磁盘真实分区,如果不行的话建议单独分一个区来存放虚拟机文件,不要在多个分区存放多个虚拟机的数据文件,否则多个虚拟机运行时,硬盘在多个分区来回读写,将大大影响性能。硬盘空间比较充裕的话,建议在创建磁盘虚拟文件的时候选择预先分配磁盘空间的选项,如果选择不预先分配磁盘空间,虚拟机使用磁盘文件的时候,在使用到磁盘空间的时候,再临时分配磁盘空间,一来增加磁盘 I/O 操作,二来会造成大量的磁盘碎片。
磁盘碎片的问题:
磁盘碎片有两个
一是存放虚拟机的磁盘,要定期做碎片整理,尤其是选择了没有预分配文件空间的选项的虚拟机。
二是虚拟机数据文件的碎片问题,虚拟机系统中所有文件实际上全部在 1 - 2 个磁盘文件上,因此数据文件内的磁盘碎片也需要定期整理, VMware 的磁盘工具里有整理磁盘的选项,需要定期运行一下
内存:
首先要提供足够的内存给运行虚拟机的寄主机器,内存现在并不贵,增加内存能非常有效减少对硬盘的读写压力。
内存的数量由需要同时运行的虚拟机和所有需要运行的数量和每个寄生操作系统对内存的需求来决定,每个寄生操作系统的内存不要配太大,要留给寄主机器足够的内存,以避免频繁的内存和虚拟内存的交换,如果同时运行多个虚拟机,分配的内存超过了寄主机器内存的大小, VMware 会在硬盘上创建额外的虚拟内存的数据文件来模拟内存,这样的情况会严重的影响整个寄主机器和寄生主机的性能,几乎就是看见硬盘灯狂闪就是啥也不能做。但是寄生主机内存配置也不能太小,否则也不能运行太多的程序。
我建议一般所有虚拟机全部启动后,操作系统至少还要 300M 以上的可用内存空间,我的经验表明,所有虚拟机全部启动后小于 100M 的可用内存空间,整个机器非常容易崩溃。
常见操作系统的虚拟机最小内存和推荐值:
WINDOWS 2000 最小 128M ,推荐 256M
WINDOWS XP 最小 128M ,推荐 384M
WINDOWS 2003 最小 128M ,推荐 384M
WINDOWS 2008 最小 512M , 推荐 1G
RED HAT 4 最小 256M 推荐 512M
RED HAT 5 最小 512M 推荐 1G
这些值不是硬性的规定,每个人可用根据自己机器的硬件配置实际情况和需要运行的程序对内存的需求来加以调整。
操作系统的优化:
只有尽可能减轻操作系统的负担,虚拟机的工作才会更顺畅,操作系统的优化有很多相关的主题,在此我不做详细的讨论,下面给出我认为有用的建议。
- 关掉不必要的服务,无论是寄主操作系统还是寄生操作系统的服务都关掉,但是要保证关掉的服务不会影响系统的运行,尤其是虚拟机相关的服务;
除非需要特别测试杀毒软件和安全软件,虚拟机上不要安装任何杀毒软件和安全软件;
- 关闭寄生虚拟机上的防火墙和其他一切和测试没有关系的软件;
无论是寄主操作系统还是寄生操作系统在性能选项的视觉效果里选择为调整为最佳性能。
- 将服务器的性能选项里的 CPU 和内存选项都设置为前台程序优先,能提高前台程序的响应;
- 配置寄主主机上的防病毒软件,将虚拟机文件存放的目录设置为不检查,避免杀毒软件频繁扫描巨大的虚拟机数据文件,增加磁盘 I/O 。
- 如果可能尽量避免同时操作多个虚拟机,尤其是虚拟机开机的时候,不要多台虚拟机同时开机;
调整实例:
说了这么多,举个实际调整的例子吧:
我需要在我的笔记本上同时运行 3 个虚拟机,做一个 WINDOWS 2008 CLUSTER 的测试, 2 台虚拟机运行 WINDOWS 2008 企业版操作系统,安装 DB2 数据库软件, 1 台机器运行 WINDOWS 2003 操作系统,运行一个 ISICS Server 程序,充当共享存储。虚拟机的内存配置为 VMware Workstation 缺省的配置,笔记本的配置为 1 个双核 T6750CPU ,3G 内存, 250G 硬盘 , 操作系统为 WINDOWS 2003 企业版。
调整前的情况:
如果只开 WINDOWS 20008 两个虚拟机,运行速度有点慢,但还没有到系统无法响应的情况,如果同时开三台虚拟机,整个系统根本无法响应,每个操作硬盘都要狂转很久才能有反映。
检查配置,发现数据文件存放在 3 个不同的分区上,每个 WINDOWS 2008 使用 1G 内存, WINDOWS 2003 操作系统使用 512M 内存。
第一次调整,修改虚拟机磁盘配置:
先将虚拟机数据文件全部集中到一个分区内,然后做磁盘碎片整理,发现磁盘有很多碎片,几乎整个磁盘显示都是碎片。碎片整理完成后测试同时开 3 个虚拟机,感觉响应有所提高,但是每隔三到四分钟,还会有硬盘都要狂转很久操作才能有反映的情况。
第二次调整,虚拟机内存配置:
仔细研究虚拟机内存,发现 WINDOW 2008 Server 虚拟机启动完成后,还有 410M 的内存可用, WINDOW 2003 SERVER 启动完成后还有 270M 内存可用,而我的 WINDOWS 2003 操作系统只有 62M 。很明显虚拟机缺省的内存配置是不合适的。
经过仔细的计算和调整,考虑要运行的 DB2 数据库软件的内存需求,我将两台 WINDOWS 2008 虚拟机服务器的内存设为 832M , 并关闭了和测试没有任何关系的服务,启动完成后,并运行了一个 DB2 的实例, WINDOW 2008 虚拟机上的内存还有 161M ,足以满足测试的需求了。 WINDOWS 2003 虚拟机上只运行一个 ISCSI Server ,对内存要求并不大,只设为了 256M ,启动完成还有 125M , 运行 ISCSI Server 后也还有 95M 左右,也足以满足要求。
完成上述调整后,寄主 WINDOWS 2003 在 3 台虚拟机启动的情况下,可用内存仍有 350M ,整个虚拟机系统运行就很正常, , 除了虚拟机启动时,基本不会出现长时间硬盘狂转的现象,这个配置基本就满足测试的需求了,到此调整结束,顺利完成了集群的测试工作。
额外的调整,意外的收获:
由于某个程序的测试要求,我还需要安装 64 位的 WINDOWS 2003 操作系统,我在配置虚拟机的时候 VMware Workstation 要求打开 Intel VM-T 功能,研究了一通后,我将我笔记本的 Intel VM-T 功能打开了,然后安装了 64 位的 WINDOWS 2003 操作系统进行测试。当时没有在意其它的东西,某天我打开上面的 2 台 WINDOWS 2008 虚拟机和 WINDOWS 2003 虚拟机时,感觉操作异常流畅,没有任何停顿的感觉。这才感觉出虚拟化的真正好处,因此建议大家在同时运行多个虚拟机的时候,一定要将 Intel VM-T 功能打开,后来在 INTEL 的网站上看了一下 INTEL 的评测报告,虚拟化技术能提高虚拟机 30 - 280 %的性能,虽然 INTEL 可能有夸大的成分,但是测试结果还是比较惊人的,感兴趣的可用到这个网址去看看。 http://www.intel.com/performance/server/xeon/summary.htm?iid=ibe_vt+legal_innthru