优化开发虚拟机

20

作为一种最佳实践,我在开发中使用虚拟机 - 我想尽可能地优化我的虚拟机。我只安装了Server 2003、IIS和Visual Studio 2008。

您如何优化您的开发虚拟机,例如关闭哪些服务等等...


你为什么更愿意在虚拟机上开发而不是在实际机器上开发?我只是问一下,因为我正在考虑做同样的事情,但我不确定其中的利弊。 - Esteban Araya
10个回答

23

通常情况下,并不存在一套普遍“正确”或“最佳”的建议。然而,以下是我在开发虚拟环境时使用的一些成功经验。

硬件提示


内存充裕!

确定每个虚拟机器需要多少内存以及您的主机需要多少内存(如果您同时在主机上运行其他程序)。将所有同时运行的虚拟机所需的内存要求总和加起来,并确定最大虚拟机RAM负载并加入主机负载。我建议至少有512MB的“缓冲区”。

例如,我需要大约768MB用于主机操作系统(WinXP Pro SP3),以及在我的客户操作系统(装有Visual Studio 2005/2008和SQL Server Developers Edition的WinXP Pro SP3)中需要大约1GB。

1024MB + 768MB + 512MB = 2.3GB

个人而言,由于目前内存价格非常便宜,我直接将32位系统扩展到了4GB(可寻址的为3.5GB)。

为操作系统和虚拟机分别使用磁盘

使用一个与操作系统磁盘分开的磁盘来运行虚拟机映像,这样可以极大地减少主机和虚拟机之间的磁盘I/O冲突。

注意:使用外部硬盘作为磁盘分离可以帮助,但要小心——Firewire和USB的延迟比IDE、SATA或SCSI要高!虽然USB 2.0和Firewire接口具有足够的带宽以实现最大磁盘吞吐量,但它们会给每个操作添加大量延迟。在高磁盘事务、小文件访问等情况下(如C++编译),这变得非常显著。我还没有机会对eSATA运行一些测试,看看它在内部SATA访问时间方面的表现如何。

使用访问时间较低的磁盘

在开发过程中,特别是在像C++这样的语言中进行编译时,会出现相当多的随机磁盘访问。为虚拟机使用7200 RPM硬盘而不是5400RPM硬盘可以减少访问时间,因此减少编译时间。升级到10000RPM或高端SSD可以进一步缩短这些时间。回报递减点取决于您环境中的特定磁盘访问负载/模式。

主机提示


禁用虚拟机文件病毒扫描

告诉您的杀毒软件忽略虚拟机目录或.vmdk文件扩展名,以便它不会不断扫描虚拟机磁盘。

避免CPU争用

如果同时运行多个虚拟机或在主机和客户操作系统中都进行工作,请至少为多核/处理器机器保存1个CPU供主机操作系统使用。 例如,如果您正在运行两个虚拟机并且在主机操作系统中没有进行任何工作,则具有单核心虚拟机的双核处理器主机可能最适合您。

如果您运行单个虚拟机并且在主机操作系统上没有工作,则运行双处理器虚拟机可能会有所帮助,如果虚拟机应用程序可以使用第二个处理器。

如果您正在运行两个虚拟机,其中一个是单处理器,另一个是双处理器,则您可能需要运行四核系统。

VMware注意事项(未经其他虚拟化应用程序确认):如果为虚拟机分配多个处理器,则它将等待两个处理器可用,并且即使不使用它们也会保留它们。这可能会导致虚拟机之间或虚拟机与主机之间发生显着争用。

客户操作系统提示


分配足够的内存

确保您分配了足够的RAM以满足虚拟机的需求

避免使用快照

除非确实需要,否则不要使用快照。维护基于快照的虚拟机文件系统会产生显着的磁盘I/O惩罚。

不要运行不必要的服务

例如:

  • 索引
  • 系统还原
  • 错误报告
  • 无线零配置

不要运行安全软件

考虑一下在虚拟机中不运行反病毒、反间谍软件或防火墙软件。您需要权衡安全与速度之间的利弊。对于许多人来说,如果他们感染了病毒,这并不是一个问题,他们只需还原先前的副本或快照即可。而对于其他人来说,潜在的敏感信息泄露需要在虚拟机内实施严格的安全策略。

我可以说,在虚拟机中不运行反病毒或防火墙软件可能是Windows虚拟机通常比它们的物理主机操作系统更加“灵敏”的最重要原因。

碎片整理!

不幸的是,在虚拟机配置中有三个地方可能会发生文件碎片:在Guest OS文件系统内部,在虚拟机文件(例如vmdk)表示的VM内部,在实际物理磁盘上的虚拟机文件中。您整理每个地方的顺序都很重要。

  • 首先,在Guest OS内部的文件系统中进行碎片整理(例如在Guest OS中运行磁盘碎片整理器或使用JkDefrag或Defraggler等工具)
  • 其次,使用vmware-diskmanager等工具对虚拟机文件(例如VMDK)进行碎片整理。
  • 第三,对持有虚拟机文件的主机上的文件系统进行碎片整理(即在主机操作系统上运行磁盘碎片整理)

8
我关闭了文件系统索引器,以节省磁盘空间和CPU时间。

1
我在每台电脑上安装时都会这样做。系统索引器是有史以来浪费时间最多的东西。 - Umber Ferrule

7

我总是在我的Windows XP虚拟机上禁用“系统还原”功能。


7

请勿在我的病毒防护程序中对我的构建文件夹进行实时扫描。

以下是我在虚拟机中关闭的服务列表:

  • 关闭关机事件跟踪
  • 关闭c:\上的索引
  • 关闭错误报告服务
  • 关闭智能卡访问
  • TCP/IP NetBIOS助手
  • 关闭远程桌面帮助会话管理器
  • 关闭远程注册表
  • 关闭不间断电源
  • 关闭Windows音频服务
  • 关闭无线零配置

5
将磁盘镜像放在外部硬盘驱动器上(甚至是 USB)可以提高性能(特别是笔记本电脑)。

硬盘速度是一个方面。大多数笔记本电脑的硬盘转速为5400 RPM,而大多数外置硬盘的转速为7200 RPM。这是如果链接不会减慢你的速度的情况下。如果你只有USB 1,它不会更快,但USB 2、3或FireWire可能会更快。 - NitroxDM
即便是速度相似的磁盘(包括笔记本电脑内部和外部驱动器都是7.2K),负载分布的改善也能提高整体性能。我从外置硬盘驱动器运行所有的代码和数据库,构建时间比在内部驱动器上更快!(这还是使用 USB2 接口,如果用 eSata 接口会更好!) - Dog Ears

3

这里有一篇关于虚拟机性能的优秀文章,请点击此处

它专门针对Sharepoint虚拟机编写,但是其中有很多通用的技巧。


1

在使用VMware Server时,我会禁用Windows页面文件。磁盘IO是VMware Server的最弱环节,而将虚拟化的RAM分页到虚拟化的磁盘文件中更是糟糕。给你的虚拟机足够的RAM,这样就可以很好地工作。

此外,并非所有的虚拟化解决方案在不同领域表现都相同。VMware在VM映像的稳定性和可移植性方面表现出色,但如果你有时间,可以尝试一些其他的解决方案。我发现更好的磁盘IO性能可以带来更好的整体体验,因此我放弃了VMware服务器更好的CPU性能(以及整体稳定性),转而选择了VirtualBox更好的IO性能。非免费的VMware版本可能会更好,但我不确定。

我发现将磁盘映像放在单独的驱动器上并不能带来太多好处。很多人会争论这一点,它可能会根据主机上正在进行的其他操作而略微提高性能,但对我来说效果不大。我也尝试过使用原始磁盘,但效果不如我所愿。

真正影响IO性能的一件事是在快照处于活动状态时运行。大多数实现都使用写时复制策略,你可以预期磁盘性能下降20%。


0

两个固态硬盘,一个用于主机操作系统,另一个用于虚拟机。


0

我最近建立了一个虚拟机,在安装之前就开始通过使用NliteWindows Update Downloader 进行优化。NLite允许您剥离所有不需要的组件(如mspaint,pinball,french等),应用所有窗口更新,并调整注册表和服务设置。因此,例如,您可以在第一次启动时禁用系统索引器。如果您正在使用Vista或2008年版本,则还可以使用Vlite。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接