十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VirtualBox 运行 Ubuntu 卡顿提速:分层优化配置与排查实践

VirtualBox 运行 Ubuntu 卡顿提速:分层优化配置与排查实践 虚拟机跑 Ubuntu 卡顿这件事几乎每个用 VirtualBox 的人都撞过鼠标一动一顿、窗口拖动像在拉橡皮筋、终端敲命令要等半秒才回显。我前后在三台机器上折腾过 VirtualBox 里的 Ubuntu从最初的能跑就行到后来把开机时间从两分半压到二十多秒、把桌面滑动从幻灯片压到基本跟手踩的坑足够写一篇长文。这篇就把 VirtualBox 运行 Ubuntu 系统卡顿提速的完整思路摊开讲卡顿到底卡在哪个环节、哪些参数是必须改的、哪些操作看着有用其实白费劲、出问题怎么排查。不管你是第一次装 Ubuntu 虚拟机的新手还是已经装好但嫌慢想调优的老手都能直接照着做。需要先说明一点卡顿从来不是单一原因它是宿主机硬件、VirtualBox 全局配置、客户机系统设置、磁盘与图形路径四层叠加的结果。只改一层往往收效甚微甚至产生我改了没用的错觉。所以下面的顺序是先定位再分层动手最后给一套可以直接抄的配置模板。1. 虚拟机卡顿到底卡在哪里先定位再动手1.1 四类卡顿的不同表现与判断方法很多人说虚拟机卡其实说的不是同一件事。最常见的四类表现对应的瓶颈完全不同如果一上来就瞎调参数很可能把 CPU 那层优化到极致结果真正卡的是磁盘 I/O。第一类是界面卡。表现是窗口拖动有拖影、菜单弹出有延迟、鼠标移动不跟手、最大化最小化有动画残影。这类基本是图形渲染路径的问题跟 CPU 核数关系不大重点在显存、显卡控制器类型和 3D 加速开关。第二类是磁盘卡。表现是打开文件慢、apt install卡在解包、编译时硬盘灯狂闪、解压大压缩包像过年。这类是 I/O 瓶颈根源通常在宿主机用的是机械盘或者虚拟磁盘用了动态分配且从来不做压缩整理。第三类是CPU 卡。表现是编译代码时风扇狂转、系统整体像慢动作、top里%sy系统态占用特别高。常见原因是分配的核数不够或者 VT-x 硬件加速没真正启用VirtualBox 退回到软件模拟执行。第四类是网络卡。表现是git clone慢、下载软件包龟速、SSH 上去敲命令回显一顿一顿的。这类跟虚拟机设置里的网卡类型和宿主机网络环境有关。判断方法很简单在 Ubuntu 里开个终端跑top再同时进行你平时觉得卡的操作看哪个指标飙红。如果是%wa等待 I/O高那就是磁盘如果是%sy高而%us不高往往是虚拟化加速没开如果 CPU 和磁盘都很闲但界面还是卡那就是图形层的问题。提示先装上 Guest Additions 再谈优化。没装增强功能的虚拟机图形、剪贴板、分辨率全都是半残状态这时候调参数属于给瘸腿的人换跑鞋。1.2 宿主机的资源账本CPU 和内存到底该怎么分分资源有个很朴素的逻辑虚拟机不是凭空创造算力它是在跟宿主机抢资源。所以分配的原则是够用且不挤占宿主机而不是越多越快。CPU 这块我的经验值是分配的虚拟 CPU 数不要超过宿主机物理核心数的一半。比如宿主机是 8 核 16 线程给虚拟机 4 个 vCPU 比较舒服4 核 8 线程的机器给 2 个。为什么不是越多越好因为 VirtualBox 的虚拟 CPU 需要跟宿主机的物理核心做调度映射分配的核数超过物理核数时宿主机得靠时间片轮转来假装有那么多核上下文切换开销反而拖慢整体响应。内存同理。宿主机 16GB 内存给虚拟机 4GB 是常见的合理值32GB 给 8GB。低于 2GB 跑带桌面环境的 Ubuntu 会很痛苦因为 GNOME 本身空闲状态就要吃掉 1.2GB 左右。高于宿主机内存的一半宿主机会开始频繁换页导致宿主机和虚拟机一起变慢属于双输。还有一个隐蔽的坑宿主机上的虚拟化平台冲突。Windows 上如果开了 Hyper-V、WSL2、Windows 沙盒、内核隔离内存完整性这些功能会独占处理器的虚拟化扩展。VirtualBox 拿不到 VT-x就只能用软件模拟执行指令性能会掉到原来的十分之一量级。这是很多人配置明明不低但虚拟机就是慢的真正原因。验证方法VirtualBox 里选中虚拟机看设置 - 系统 - 加速标签页如果启用 VT-x/AMD-V是灰色不可勾选或者启动后右下角出现一个蜗牛图标就说明硬件虚拟化没生效。解决办法是在 Windows 的启用或关闭 Windows 功能里关掉 Hyper-V 和虚拟机平台再用bcdedit /set hypervisorlaunchtype off关闭引导级虚拟化重启生效。1.3 图形渲染路径为什么界面滑动像放幻灯片图形这块值得单独说因为它是最多人抱怨的卡也是最容易误诊的。虚拟机的图形渲染链路是这样的Ubuntu 的桌面合成器把画面渲染到虚拟显卡的显存VirtualBox 再把这块显存的内容搬运到宿主机的窗口上。中间多了一层搬运如果显存不够、显卡控制器类型选错、或者 3D 加速没开这一层搬运就会变成瓶颈。显存默认值往往只有 16MB这个值跑现代桌面环境是不够的。Ubuntu 20.04 之后的 GNOME 在 1080p 分辨率下光桌面合成就需要 50MB 以上的显存。所以第一步就是把显存拉到 128MBVirtualBox 的上限这一步基本是无脑操作。显卡控制器有几种选择VBoxVGA 是老控制器兼容性最好但不支持 3D 加速VBoxSVGA 是新版默认支持 3D 但对 Wayland 支持一般VMSVGA 是模拟 VMware 的显卡对 Linux 客户机的兼容性最好Ubuntu 官方镜像默认走的就是这条路。所以 Linux 客户机我一般选 VMSVGA。3D 加速这个开关要分情况。开了之后 GNOME 的动画会明显顺畅但在某些 VirtualBox 版本加某些内核版本的组合下会出现花屏、黑屏、窗口闪烁的毛病。我的做法是先开启试跑如果一切正常就留着如果出现画面异常就关掉 3D 加速改用轻量桌面环境来补足流畅度而不是硬扛。另外提醒一句Ubuntu 从某个版本开始默认使用 Wayland 显示服务器而 VirtualBox 的增强功能对 Wayland 的支持一直不如 Xorg 完善。如果你遇到分辨率不能自动调整、剪贴板共享失效、窗口拖拽异常可以切回 Xorg在登录界面点右下角的齿轮图标选择Ubuntu on Xorg再登录。2. VirtualBox 全局配置装机前就该定好的参数2.1 版本选择与扩展包安装VirtualBox 的版本差异比你想象的大。老版本比如 5.2.44很多年前确实流行因为某些网络设备模拟软件锁定了这个版本。但 5.2 系列对新版 Linux 内核的支持已经跟不上装 Ubuntu 22.04 之后经常出现增强功能编译失败、共享文件夹挂不上、图形驱动不匹配的问题。如果你没有特殊的软件兼容性要求我建议用 6.1 的后期版本或者 7.0 系列。这两个系列在 Linux 客户机上的稳定性、图形驱动、NVMe 控制器支持都好了不少。7.0 之后还改进了音频和 USB 的处理。扩展包Extension Pack是另一个必装的东西。它提供 USB 2.0/3.0 控制器支持和远程桌面协议支持。不装扩展包虚拟机的 USB 只能跑 1.1 速度插个 U 盘拷数据能让你怀疑人生。装的方法很简单下载对应版本的扩展包文件双击VirtualBox 会自动调起安装向导。注意扩展包的版本号必须跟主程序完全一致否则会拒绝安装。2.2 芯片组、I/O APIC、EFI 这些开关怎么选系统设置标签页里有一堆开关名字看着很硬核其实逻辑不复杂。芯片组选 PIIX3 还是 ICH9。PIIX3 是老式芯片组兼容性最好ICH9 支持更多 PCI 设备槽位如果你需要挂多个虚拟磁盘或者要用到 PCI 直通选 ICH9。日常用 Ubuntu 桌面PIIX3 完全够而且出问题的概率更低。I/O APIC这个开关只要你的虚拟机分配的 CPU 数量大于 1就必须勾上。它负责中断的分发不勾的话多核虚拟机的中断会全压在 CPU0 上表现为系统整体响应迟钝但负载看着不高很容易误判。EFI启用与否要看客户机系统。Ubuntu 的 ISO 同时支持传统 BIOS 和 EFI 引导两种都行。但要注意如果你一开始用 BIOS 模式装了系统后来把 EFI 打开系统会启动不了因为引导记录的位置不一样。这个开关装系统前定好之后别乱动。指点设备鼠标选USB 平板比PS/2 鼠标体验好前者的鼠标定位更精准不会出现鼠标飘或者点不准的问题。2.3 处理器与加速真正决定性能的两个标签页处理器标签页里除了核数还有人容易忽略的执行功能PAE/NX 保持默认勾选嵌套分页Nested Paging必须勾上。嵌套分页让虚拟机的内存地址转换由硬件直接完成不勾的话每次内存访问都要经过两层页表翻译性能损失肉眼可见。加速标签页是重中之重三个选项启用 VT-x/AMD-V核心开关必须勾勾不上说明宿主机虚拟化被占用。启用嵌套分页必须勾硬件辅助内存管理。半虚拟化接口这个选项很多人空着。对 Linux 客户机建议选 KVM对 Windows 客户机选 Hyper-V。半虚拟化接口能让客户机知道自己跑在虚拟机里从而使用更高效的虚拟化调用路径减少特权指令陷入的开销。实测在 Ubuntu 上选 KVM 之后sysbench的 CPU 得分能提升一成左右。注意如果加速标签页里的选项全是灰的不要硬着头皮往下装系统先把宿主机层面的虚拟化冲突解决掉否则后面所有优化都是徒劳。2.4 磁盘控制器与镜像格式I/O 性能的地基存储设置是很多人完全跳过的地方但它对流畅度的影响极大。控制器类型上VirtualBox 现在支持 IDE、SATA、SAS、NVMe、virtio-scsi。老教程都教选 SATA这没错SATA 兼容性好Linux 内核自带驱动。但如果你用的 VirtualBox 版本在 6.0 以上客户机是 Ubuntu 20.04 之后的版本可以考虑 NVMe 控制器。NVMe 在虚拟化下的命令队列更深大量小文件读写的表现比 SATA 好一截编译和包管理的体感差异明显。勾选固态驱动器这个选项。它不会让你的虚拟磁盘真的变成 SSD但它会告诉客户机系统这是一块 SSDUbuntu 收到这个信号后会启用 TRIM 支持和不同的 I/O 调度策略对响应速度有帮助。宿主 I/O 缓存建议勾上。它让宿主机把虚拟磁盘的读写先缓存在内存里能显著减少磁盘等待。代价是万一宿主机突然断电虚拟机数据可能有损坏风险。如果是开发测试环境勾上换取性能是划算的如果有重要数据可以定期做备份而不是关掉缓存。镜像格式方面VDI 是 VirtualBox 的原生格式性能最好VMDK 是兼容 VMware 用的VHD 是兼容微软的。没有跨平台需求就用 VDI。至于动态分配和固定大小固定大小的镜像在写入时少了扩展文件的开销性能略好占用空间也直观。但如果你磁盘空间紧张动态分配更灵活。我的做法是常用虚拟机用固定大小临时测试的用动态分配。3. Ubuntu 客户机侧的提速操作3.1 增强功能安装所有优化的前提增强功能Guest Additions是 VirtualBox 提供的一套客户机驱动包含显卡驱动、鼠标集成、剪贴板共享、共享文件夹、时间同步等模块。不装它前面所有配置的收益都要打对折。安装流程是这样先启动虚拟机等系统起来后在 VirtualBox 菜单里点设备 - 安装增强功能这会把一个 ISO 挂载进客户机。然后在 Ubuntu 里打开终端先装编译依赖sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) gcc make perl这一步经常被跳过导致后面的安装脚本因为找不到内核头文件而失败。装完依赖后挂载并运行安装脚本sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom sudo ./VBoxLinuxAdditions.run安装完重启虚拟机。重启后可以跑lsmod | grep vbox检查模块是否加载正常应该能看到vboxguest、vboxsf、vboxvideo这几个。如果安装过程中报错说找不到内核头文件通常是linux-headers-$(uname -r)这个包版本对不上因为 Ubuntu 内核更新后头文件包可能没同步装上。解决办法是先跑sudo apt install linux-headers-generic或者先sudo apt full-upgrade升级内核后重启再装。3.2 内核参数与内存管理调优Ubuntu 默认的内存管理参数是按物理机场景定的放在虚拟机里不一定合适。几个值得调的vm.swappiness。默认值 60意思是内存压力还没那么大的时候就开始往交换分区倒数据。虚拟机里磁盘本来就慢一旦开始交换就是灾难。建议降到 10echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf sudo sysctl -pvm.dirty_ratio 和 vm.dirty_background_ratio。这两个控制脏页回写阈值。虚拟机磁盘写入慢如果一次攒太多脏页回写时会有一个明显的卡顿尖峰。可以把后台回写阈值调低让写入更早、更平滑地发生sudo tee -a /etc/sysctl.conf EOF vm.dirty_background_ratio5 vm.dirty_ratio15 EOF sudo sysctl -p交换分区大小。Ubuntu 默认创建的 swap 文件在内存小的虚拟机里会频繁被使用。如果宿主机内存充足建议给虚拟机多分点内存而不是靠 swap 撑着。如果确实需要 swap把它放在 SSD 所在的虚拟磁盘上。另外如果虚拟机内存分配得比较小可以考虑启用 zram用压缩内存代替磁盘交换sudo apt install -y zram-tools在/etc/default/zramswap里设置PERCENT50这样最多用一半内存做压缩交换。内存压缩的读写速度比磁盘交换快两三个数量级在内存紧张的虚拟机里效果立竿见影。3.3 关掉那些你不知道在跑的后台服务Ubuntu 桌面版默认装了一堆后台服务在物理机上没什么感觉在虚拟机里就是白白的资源消耗。unattended-upgrades是自动更新服务它会在后台悄悄下载更新包占用网络和磁盘 I/O。如果你不希望虚拟机在你干活时突然卡一下可以关掉自动下载sudo systemctl disable --now unattended-upgradesapport是崩溃上报服务会在程序崩溃时收集大量信息并写盘。开发环境下不需要sudo systemctl disable --now apporttracker是 GNOME 的文件索引服务它会遍历你的整个家目录建立索引。如果你的项目目录里有一堆node_modules这个索引过程能持续好几分钟期间磁盘持续高负载。可以直接禁掉systemctl --user mask tracker-store tracker-miner-fs-3snapd的自动刷新也值得注意。Ubuntu 会定期检查并更新 snap 包这个过程会占用相当多的资源。可以在设置里把自动刷新时间改到你不用虚拟机的时候或者直接禁用sudo systemctl disable --now snapd.refresh.timer3.4 桌面环境GNOME 太重就换掉如果你把上面这些都做完还是觉得界面不跟手那瓶颈很可能就是桌面环境本身。GNOME 3 之后的版本是围绕现代硬件设计的特效、动画、布局计算都很吃资源在虚拟机的软件渲染路径下容易力不从心。切换轻量桌面的思路是保留 Ubuntu 系统基础只换桌面。装 Xfce 是最常见的做法sudo apt install -y xubuntu-desktop安装时如果提示选择显示管理器选 lightdm。装完重新登录在登录界面选择 Xfce 会话。Xfce 在虚拟机里的流畅度通常比 GNOME 高一个档次内存占用也从 1.2GB 降到 400MB 左右。如果还嫌重LXQt 或 IceWM 更轻但界面观感会朴素一些。我的建议是开发主力虚拟机用 Xfce够用且熟悉临时的测试环境可以考虑 Ubuntu Server 版本加最小化桌面甚至只用命令行。还有一个小技巧即使不换桌面也可以关掉 GNOME 的动画gsettings set org.gnome.desktop.interface enable-animations false动画一关窗口切换和菜单弹出会立刻感觉跟手了很多这是性价比最高的一步。4. 磁盘与共享目录最容易被忽略的性能黑洞4.1 虚拟磁盘的预分配与压缩整理虚拟磁盘用久了会有一个问题文件只增不减。你今天写了 10GB 数据又删掉了虚拟磁盘文件依然是 10GB 之后的大小而且这些空洞会让 I/O 变得碎片化。压缩虚拟磁盘分两步。先在 Ubuntu 里把空闲空间用零填满让 VirtualBox 知道这些块可以回收dd if/dev/zero of/zerofill bs1M statusprogress sync rm -f /zerofill sync注意dd会一直写到磁盘满然后报错退出这是正常的。填完之后关机在宿主机上跑VBoxManage modifymedium disk 路径/xxx.vdi --compact这个命令会扫描全零块并回收通常能省下不少空间同时减少碎片。我的经验是一个用了半年的开发虚拟机压缩后体积能缩掉三成启动速度也有改善。如果你的虚拟磁盘是动态分配的还可以考虑转换成固定大小。转换需要克隆一份时间较长但从动态转固定之后写入延迟会明显降低VBoxManage clonemedium disk 源.vdi 目标.vdi --variant Standard4.2 共享文件夹的真实性能与替代方案共享文件夹是 VirtualBox 很方便的功能但它的性能真的不怎么样。它走的是 VirtualBox 自己实现的一套文件系统协议大量小文件读写时延迟高得离谱。我实测过在一个共享目录里跑npm install比在虚拟机本地目录跑慢了大概四倍。所以第一条原则是不要把项目代码放在共享文件夹里编译。正确做法是把代码放在虚拟机的本地磁盘用共享文件夹只做文件交换。如果确实需要频繁在宿主机和虚拟机之间同步代码有几个更好的选择。一是用 SSHFS 挂载性能比共享文件夹好一些而且支持缓存二是用 rsync 做单向同步改动后触发一次同步速度最快三是用 Git 仓库做中转宿主机和虚拟机各自 clone 一份通过网络推送拉取。宿主机的共享目录也要注意放在哪个盘。如果共享目录在机械盘上虚拟机读它的时候速度会很慢。放在 SSD 上体验好很多。4.3 快照管理方便但不免费的代价快照是 VirtualBox 的一个好用功能可以在任意时刻保存虚拟机状态出问题了回滚。但快照的代价经常被低估。快照的原理是记录磁盘的增量变化每创建一个快照后续的写入都会先写到增量文件里。快照链越长读写路径就越复杂性能下降越明显。我见过有人给虚拟机打了几十个快照最后虚拟机慢得像在泥里走路。我的做法是保持快照链不超过两层用完就删。删除快照时选择合并而不是删除把增量数据合并回主磁盘。如果某个快照不再需要尽早合并掉。另外快照不要当备份用。快照文件跟原磁盘是绑定关系一旦主磁盘文件损坏或者丢失快照也就废了。真正的备份应该是把虚拟磁盘文件复制到另一块盘上。5. 常见问题排查速查表5.1 启动报 Kernel driver not installed (rc-1908) 怎么办这个报错几乎每个 Linux 用户都遇到过意思是 VirtualBox 的内核模块没有正确编译或加载。原因通常是系统内核更新了但 VirtualBox 的模块还是为旧内核编译的。标准的修复流程是重新编译内核模块sudo /sbin/vboxconfig如果这一步报错说明编译环境不全。先装头文件和编译工具sudo apt install -y linux-headers-$(uname -r) build-essential sudo /sbin/vboxconfig还有一个隐蔽的原因Secure Boot。如果宿主机开了安全启动未签名的内核模块会被拒绝加载。这时候vboxconfig会提示你需要给模块签名。解决办法是要么在 BIOS 里关掉 Secure Boot要么按照提示用 MOK 工具注册密钥。用 MOK 的流程是vboxconfig会提示你设置一个密码然后重启在启动过程中会出现蓝屏界面选择 Enroll MOK输入刚才的密码完成后模块就能加载了。如果以上都试过还是不行检查一下是不是宿主机装了多个版本的内核当前启动的内核版本和头文件版本不一致。用uname -r看当前内核用dpkg -l | grep linux-headers看装了哪些头文件对不上就补装。5.2 剪贴板、分辨率、拖拽失效的组合处理这三个问题经常一起出现因为它们都依赖增强功能里的同一个模块。先确认增强功能装没装、装对没有。在 Ubuntu 里跑lsmod | grep vbox如果vboxguest和vboxsf都在说明模块加载正常。然后检查 VirtualBox 的设备 - 共享剪贴板是不是设成了双向。这两步都对剪贴板还是不通多半是显示服务器的问题。如果用的是 Wayland 会话切到 Xorg 试试。登录界面点右下角齿轮选 Ubuntu on Xorg。切过去之后剪贴板、拖拽、自动调整分辨率通常都能恢复正常。分辨率不能跟随窗口大小变化还有一个可能是增强功能里的显示驱动没生效。可以手动设置一个固定分辨率在 VirtualBox 的视图 - 虚拟屏幕里调整或者用命令注入自定义分辨率VBoxManage setextradata 虚拟机名称 CustomVideoMode1 1920x1080x325.3 网络卡顿与网卡类型的选择虚拟机网络模式有几种NAT、桥接、仅主机、内部网络、NAT 网络。性能上差别不大但使用场景不同。NAT 是最省事的虚拟机通过宿主机上网宿主机不用做任何配置但外部设备访问不到虚拟机。桥接模式让虚拟机直接从路由器拿 IP网速通常比 NAT 略快因为少了一层地址转换适合需要被外部访问的场景比如虚拟机里跑个 Web 服务让手机测试访问。网卡类型建议选半虚拟化网络virtio-net。它比默认的 Intel PRO/1000 效率高CPU 占用低。但要注意选 virtio-net 之前必须先装好增强功能或者系统自带 virtio 驱动否则虚拟机起来之后会看不到网卡。Ubuntu 从 18.04 之后的内核都自带 virtio 驱动所以直接选没问题。如果发现虚拟机里下载速度只有宿主机的几分之一先检查是不是被宿主机的安全软件限速了再检查网卡类型。另外如果你用的是无线网络桥接模式下偶尔会有兼容性问题可以试试切回 NAT。5.4 与其他虚拟化软件的冲突处理宿主机上同时装多个虚拟化软件是常见的冲突来源。VirtualBox 和 Hyper-V 抢处理器虚拟化扩展是最典型的前面已经说过关闭方法。另一个真实存在的情况是某些网络设备模拟软件会锁定特定版本的 VirtualBox。比如老版本的网络模拟器要求 VirtualBox 必须是 5.2.x而你为了跑 Ubuntu 装了 7.0结果两边都启动不了。这种冲突没有银弹可行的方案是装两个版本的 VirtualBox 到不同目录用哪个启动哪个但要注意驱动程序会互相覆盖切换时需要重新跑一次vboxconfig。还有一个容易忽略的点Windows 上的内核隔离和内存完整性功能。它们在设置 - 隐私和安全性 - Windows 安全中心 - 设备安全性里。这两个功能开启后会用虚拟化技术保护系统内核代价就是 VirtualBox 的性能大幅下降。如果你的机器不需要这个额外的安全层关掉它对虚拟机的提速效果非常明显。6. 一套可以直接抄的配置模板与实测记录6.1 关键参数速查表下面这张表是我在一台 8 核 16 线程、32GB 内存、NVMe 固态的 Windows 机器上跑 Ubuntu 22.04 桌面版的实际配置可以直接照着填。配置项位置建议值说明内存系统 - 主板8192MB不超过宿主机内存一半CPU 核数系统 - 处理器4不超过物理核心数一半嵌套分页系统 - 处理器勾选硬件内存管理必开半虚拟化接口系统 - 加速KVMLinux 客户机专用显存显示128MB拉到上限显卡控制器显示VMSVGALinux 兼容性最好3D 加速显示先开后测花屏则关闭磁盘控制器存储NVMe 或 SATA6.0 以上可选 NVMe固态驱动器存储勾选启用 TRIM 和优化调度宿主 I/O 缓存存储勾选提升 I/O 响应网卡类型网络virtio-netCPU 占用低磁盘格式存储VDI 固定大小性能优于动态分配客户机系统侧的调优项整理成一张对照表调优项命令或位置效果安装增强功能设备菜单 脚本图形和共享功能的基础swappiness/etc/sysctl.conf减少交换降低卡顿尖峰脏页回写阈值/etc/sysctl.conf写入更平滑禁用 trackersystemctl --user mask减少磁盘索引负载禁用自动更新systemctl disable避免后台抢占 I/O关闭动画gsettings界面立刻跟手换 Xfce 桌面apt install内存占用降六成6.2 提速前后的实测对比为了有个直观参考我记录了一组数据。测试环境是同一台机器、同一个 Ubuntu 22.04 镜像唯一变量是配置。优化前开机到登录界面 148 秒内存占用 3.1GBapt install一个中等大小的包耗时 26 秒拖动窗口有明显拖影终端回显有可感知延迟。优化后开机到登录界面 23 秒内存占用 1.4GB同样的apt install耗时 8 秒窗口拖动跟手终端回显基本无感。这里面贡献最大的三项分别是关闭宿主机的内核隔离和 Hyper-V这一项单独就贡献了接近一半的提升、安装增强功能并把显存拉到 128MB、以及禁用 tracker 和自动更新。剩下的内核参数微调和桌面环境切换属于锦上添花但累积起来也有明显体感。需要提醒的是不同硬件平台的数据差异会很大。机械硬盘的机器磁盘 I/O 会是绝对瓶颈优化上限明显低于固态硬盘内存只有 8GB 的机器把虚拟机内存压到 2GB 以内、同时用 zram 压缩交换会更实际。6.3 一个被我踩过的坑别迷信全核心分配我早期有个错误认知觉得给虚拟机分配越多核越流畅于是一台 8 核机器给虚拟机分了 8 个 vCPU。结果虚拟机比之前更卡宿主机也变得一顿一顿。后来才想明白VirtualBox 的虚拟 CPU 是要和物理核心做映射的当 vCPU 数等于物理核心数时VirtualBox 在调度某个虚拟 CPU 时需要等待一个完整的物理核心空闲等待时间反而变长。更糟的是宿主机自己还要运行抢占之后双方都在等。正确做法是留出余量。给虚拟机分配物理核心数的一半左右让宿主机始终有空闲核心可用整体响应反而最好。这个规律在内存分配上也成立。还有个相关的坑是CPU 执行上限这个设置。它的本意是限制虚拟机最多占用多少宿主机 CPU 时间默认 100% 表示不限制。有些人为了让虚拟机别太快影响宿主机把它调到 50%结果虚拟机性能直接砍半。除非你确实需要做资源隔离否则保持 100%。6.4 长期使用的维护习惯虚拟机提速不是一次性的活用的时间长了性能会慢慢退化有几个习惯能帮你维持状态。第一每两三个月做一次磁盘压缩把删除文件留下的空洞回收掉。前面给过dd填零加VBoxManage --compact的组合做完重启一次。第二定期清理快照。检查有没有忘记删的旧快照快照链超过两层就该合并了。第三给虚拟磁盘留足空间。宿主机的物理磁盘使用率超过 90% 之后写入性能会断崖式下降。保持至少 15% 的可用空间虚拟机的 I/O 表现才正常。第四如果虚拟机长期不用别只是挂起直接关机。挂起状态会持续占用宿主机内存和一部分后台资源。第五定期更新增强功能。升级了 VirtualBox 主程序之后客户机里的增强功能也要跟着重装一遍否则可能出现驱动不匹配的问题。我个人在实际操作中的体会是虚拟机提速最忌讳到处试参数。先花十分钟用top定位瓶颈在哪一层然后针对那一层动手比盲目调二十个选项有效得多。另外宿主机侧的准备工作往往比虚拟机内部调优更重要尤其是关闭 Hyper-V 和内核隔离这一步很多人跳过了它然后在虚拟机里折腾半天内核参数最后效果甚微。如果你现在正准备装第一台 Ubuntu 虚拟机建议按照本文的配置表先把参数填好再装系统能省掉后面大量的返工。
返回列表