为什么在VirtualBox中运行的Ubuntu虚拟机非常慢?

我目前正在使用Ubuntu 12.04 LTS作为主机,我虚拟了三台机器: - 一台Xubuntu 12.04客户机 - 一台Windows 7客户机 - 一台Ubuntu 12.10客户机 所有的客户机都使用了相同的VirtualBox默认设置,但是Ubuntu 12.10运行得比较慢! 安装过程花了1小时40分钟!(通常只需要40分钟。)现在无法正常使用,所有操作都非常非常缓慢。 我使用的是VirtualBox版本4.2.4。 有什么建议吗? 为什么会这么慢?如何提高速度?

你试过调整配置了吗?你试过安装客户机增强功能了吗? - usr12390
是的,我已经安装了增强功能,但似乎没有任何变化...奇怪的是,我安装了许多带有Ubuntu或其他发行版的虚拟机,但只有Ubuntu 12.10会出现这种情况...在安装过程中,我将所有设置保持为默认,就像以前一样;其他两台虚拟机都正常工作... - Giorgio
2Flimm在下面的回答中解决了我的速度慢的问题。http://askubuntu.com/a/214968/107015 - JS.
7个回答

Ubuntu 12.10不再包含Unity 2D,这是为无法提供3D加速的平台而实施的。相反,Ubuntu 12.10在LLVM下运行Unity,使本来用于GPU的代码在CPU上运行。与使用GPU相比,它要慢得多。

要检查您的Ubuntu 12.10客户机是否正在使用3D加速,请运行以下命令:

$ /usr/lib/nux/unity_support_test -p
Not software rendered:    no
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       no
正如你所看到的,在这个例子中,“Not software rendered”和“Unity 3D supported”都返回“no”,这意味着Unity正在使用较慢的LLVMpipe。

如何启用3D加速(仅适用于VirtualBox 4.2.x)

这些说明适用于从VirtualBox官网安装的VirtualBox 4.2.4或4.2.6版本,而不是从Ubuntu软件源安装的版本。未来的VirtualBox版本可能会自动修复此问题,或者可能需要不同的解决方法。

  1. 安装VirtualBox Oracle VM VirtualBox Extension Pack。
  2. 创建一个VirtualBox实例并在其中安装Ubuntu 12.10。
  3. 为增强功能安装一些必需的软件包:

    sudo apt-get install linux-headers-$(uname -r) build-essential
    
  4. 通过点击设备、安装增强功能,并从CD-ROM目录下运行以下命令来安装增强功能:

    sudo ./VBoxLinuxAdditions.run
    
  5. 通过运行以下命令将vboxvideo驱动程序添加到实例中:

    sudo bash -c 'echo vboxvideo >> /etc/modules'
    
  6. 关闭VirtualBox实例。
  7. 打开Virtualbox实例的设置,导航到“显示”,并勾选“启用3D加速”。
  8. 启动您的Ubuntu 12.10客户机,并通过运行以下命令检查3D加速是否正常工作:

    /usr/lib/nux/unity_support_test -p
    
如果窗口似乎消失了,请安装CompizConfig设置管理器,并在OpenGL部分禁用Frame Buffer Object(FBO):
  1. 安装CompizConfig设置管理器:

    sudo apt-get install compizconfig-settings-manager
    
  2. 运行CompizConfig设置管理器:

    ccsm
    
  3. 选择OpenGL部分,然后取消选中Framebuffer Object选项。如果这样修复了问题,应该会立即显示出来。无需重新启动。

28这是一个很好的修复,值得多次点赞。 - nanofarad
还需要注意的是,当你运行VBoxLinuxAdditions.run时,如果你已经安装了打包的驱动程序,它可能会抱怨。所以“sudo apt-get remove --purge virtualbox-guest-x11”可能是有用的,可以包括在内。 - popey
4在我新安装的 Ubuntu 12.10 上(使用 Mac OS X 10.6 上的 VirtualBox 4.2.4),这确实加快了速度...但是显示方面存在很多错误。窗口会消失,除非打开 Dash,否则启动器不会显示等等。 - Benjamin Oakes
我建议您安装linux-headers-generic,这样您就可以自动获取新版本,并且还可以使用dkms在新内核版本上进行自动重建。 - beruic
12“Not software rendered” 是一个非常令人困惑的属性名称 :S - Adam Harte
1不错的帖子,但是即使做了这些(并且3D也被支持),机器仍然非常慢...该死的Ubuntu! - user568021
如果Unity桌面环境不能满足你的需求,考虑切换到LXDE、XFCE或者KDE(例如Lubuntu、Xubuntu、Kubuntu)等其他桌面环境。 - gertvdijk
当我按照这个答案中的指示操作时,我的虚拟机在启动过程中中止了。我可以不开启3D加速来启动虚拟机,但这会导致机器运行缓慢。 - reprogrammer
禁用“帧缓冲对象”对我来说起了作用。其余的工作都是通过从VirtualBox中检查“设备/安装增强功能...”来自动完成的。非常感谢。 - Pierre de LESPINAY
2@reprogrammer:我曾经遇到同样的问题。尝试使用Ubuntu仓库中的附加软件包,而不是VirtualBox自带的最新版本。请执行以下操作: 运行以下命令卸载: sudo apt-get remove virtualbox-guest-additions (这将卸载您安装的版本) 然后再运行以下命令安装: sudo apt-get install virtualbox-guest-additions (这将安装默认仓库中的版本)接下来,在设置中打开附加驱动程序(或通过"软件源" > "附加驱动程序" 在最新版本的Ubuntu上),然后选择明显可见的一个。 - labsin
如果我已经运行着Ubuntu的虚拟机而且没有安装扩展包,会怎么样呢? - Umair A.
非常好的答案。最近版本的VirtualBox在“插入”ISO时会直接提示我运行Guest Addition脚本,而不需要手动运行sudo命令。 - Thorbjørn Ravn Andersen
1我已经做了这个并取消了帧缓冲...现在我的屏幕闪烁得像地狱一样 :( - Dumbo
我遇到了一个问题,这个修复方法不起作用,但是我首先确保在Ubuntu中启动时取消了3D加速,然后再次启动并勾选它。您可以在说明的最后进行此操作。 - RyanTM
非常好的建议,谢谢!我早就安装了“Guest Additions”,唯一缺少的是:sudo bash -c 'echo vboxvideo >> /etc/modules'。重启后,我得到了“Unity 3D支持:是”,界面变得更快了。 - Grimmo
可以确认这个方法适用于在VirtualBox 4.3.8上使用Ubuntu 13.10。在进行了这个修复之前,它几乎无法使用,但现在它的运行情况与我对一个虚拟机的期望相符。没有出现任何窗口消失的情况。正如Thorbjørn Ravn Andersen所说,我也发现GuestAdditions会自动运行,而不需要sudo命令。 - Steve Pettifer
每当由于Ubuntu更新而导致客户附加组件停止工作时,我总是会再次查看这个特定的答案。毫无疑问,这是StackExchange上对我最有帮助的与管理员相关的答案之一。 - G. Bach
VirtualBox 4.3.10 在 Debian、Ubuntu 14.04 上:关于第四部分要小心。在完成第一至第三部分后,你需要输入命令4。如果你使用自动弹出安装方式可能会无效。这次对我来说是有效的,尽管在命令8中出现了很多OpenGL警告。 - PythoNic
6我无法在VirtualBox 4.3.12上使其工作。对于VirtualBox 4.3.12,我的解决方案是安装一个更新的GuestAdditions版本,参考链接:https://www.virtualbox.org/ticket/12941 具体来说,下载链接为:https://www.virtualbox.org/download/testcase/VBoxGuestAdditions_4.3.13-93885.iso - Gordon Glas
1Gordon的链接现在是一个404错误,但这个链接仍然有效:http://download.virtualbox.org/virtualbox/4.3.14/VBoxGuestAdditions_4.3.14.iso 安装它修复了我的3D渲染问题。 - Tor Klingberg
无法在虚拟机4.3和Ubuntu 14.04中工作。 - Nate
1@Nate 我弄好了,只需要安装最新的VirtualBox(目前是4.3.16版本),最新的Guest Additions,并启用了3D加速。我没有按照这个答案中的其他步骤操作。 - Vinicius Braz Pinto
你是一个绅士和学者! - Ezekiel Victor
1这在14.04上也非常好用。 - Wjdavis5
在17.04的主机和17.04的客户端上完美运行。非常感谢您。 - Matt


我也有同样的想法,因为其他虚拟机唯一的区别就是只有Unity 3D...而且我不能使用3D加速,因为我的CPU是一个没有这个功能的旧型号...所以,我会换一个新的处理器 :) - Giorgio
1我不认为这是准确的——问题的原因是VirtualBox对X Server 1.13的支持不足,而不是Unity。这是一个重要的区别,因为可以很容易地替换Unity(例如,使用XFCE),但我不知道如何降级默认版本的X Server。 - Mzzzzzz
1你为什么说这是一个X的问题?对我来说,例如回退到Gnome就解决了。所以这是一个替换Unity的问题,而不是X的问题吗? - Nanne
@marcopolo1010,Xubuntu 12.10的XServer版本为1.13,在VirtualBox中表现出色(绝对比Ubuntu 12.10快得多)。所以这一定是Unity的问题。 - ignis
此外,如果您使用的是 Mac,您可以尝试增加给虚拟机分配的 CPU 数量。这对我有很大帮助!以下是我获取此信息的来源:http://code.dimilow.com/ubuntu-12-10-slow-as-virtualbox-guest-os/ - Matt Wolfe
我遇到了完全同样的问题,并且通过禁用Cinnamon成功解决了它。 - Pete
在VirtualBox 4.3.28+中,您可以启用3D加速。设置 > 显示 > 启用3D加速。 - Roman Mik


我不清楚在虚拟机中使用Unity所需的GUI设置,但我知道如何调整VirtualBox、KVM和其他虚拟机。我从未能够在任何虚拟环境中成功地运行Unity。我也没有花太多精力去尝试,而是更喜欢使用纯窗口管理器或基于LXDE的桌面环境。

更详细的设置请参考这里:http://blog.jdpfu.com/2012/09/14/solution-for-slow-ubuntu-in-virtualbox

总结:

  • Vbox的默认设置对于喜欢真实GPU的Ubuntu版本来说并不好。
  • 在机械硬盘上,预分配整个虚拟磁盘。在固态硬盘上则无所谓。
  • 只分配你需要的存储空间。将大文件保存在vStorage之外的其他地方。
  • 不要分配比你需要的更多的CPU或内存。也许1个vCPU就足够了。
  • 为HostOS保留1GB的内存。不要过度分配内存。
  • 使用进行存储和网络。现代Linux客户端支持此功能。
  • 对于Windows客户端,请使用SATA(存储)和Intel PRO/1000(网络)驱动程序。在Windows下使用virtio驱动程序可能会稍微麻烦一些。
  • 从2003年开始,对所有客户端启用ACPI和AHCI,包括WinXP及以后的版本。
  • 桌面虚拟机应该获得全部128MB的显示vRAM。
  • 服务器虚拟机应该保持9MB的vRAM;不要浪费它。
  • 在其他设置都按照您的喜好工作正常之前,避免使用2D和3D加速设置。当启用此功能时,Ubuntu/Unity会出现问题。它可能会使Core i7性能下降。
在其他答案中有很多关于GUI性能的技巧。这些技巧可能也是有效的。 这些相同的技巧适用于KVM、VM-Player和其他虚拟化管理程序。这些技巧也适用于服务器。 祝好运。

2你链接的博客文章是关于Ubuntu 12.04的。Ubuntu 12.10有很大的不同,因为它不再包含Unity 2D,并且当它无法检测到硬件加速时,普通的Unity会使用LLVMPipe进行渲染。 - Flimm
2我的Ubuntu服务器虚拟机在将视频内存从约8MB增加到128MB后变得更快了。我用它进行Rails开发。 - user284608

我从Unity切换回了备用的GNOME,效果不错。您可以通过在软件中心安装GNOME-session-fallback,然后在登录屏幕上选择它来完成此操作。

参见:http://www.psychocats.net/ubuntu/classicgnome 以获取详细的随机指南


1在Ubuntu 16.04中,软件包名称是gnome-session-flashback。这似乎是唯一能改善我的用户界面性能的东西。谢谢! - Mustafa

要启用3D支持,首先需要更新linux-headers。
$ uname -r
$ sudo apt-get install linux-headers-$(uname -r)
$ sudo apt-get autoremove
$ sudo apt-get install build-essential

现在从设备中插入VirtualBox Guest ISO并手动安装

$ cd /media
$ ls
$ cd username
$ ls
$ cd VBOX*
$ ls
$ sudo ./VBoxLinuxAdditions.run
将vboxvideo插入到/etc/modules中
$ sudo nano /etc/modules
在文件末尾添加“vboxvideo”。
loop
lp
vboxvideo
重启机器
$ sudo reboot
重启后,请检查是否启用了“非软件渲染”和“支持Unity 3D”。
$ /usr/lib/nux/unity_support_test -p
下一步你想要做的是增加视频内存。寻找.vbox文件。
$ nano /home/username/VirtualBox VMs/ubuntu/ubuntu.vbox
替换
<Display VRAMSize="128" monitorCount="1" accelerate3D="true" accelerate2DVideo="false"/>

<Display VRAMSize="256" monitorCount="1" accelerate3D="true" accelerate2DVideo="false"/>
来源:如何修复在VirtualBox中运行的Ubuntu 13.04的性能缓慢问题

对我来说,简单有效的方法是在虚拟机显示设置中启用3D加速。enter image description here