服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-08 简米科技 3,125 字 7 分钟阅读

qemu虚拟机吧,如何高效配置虚拟机磁盘与内存?虚拟机性能优化技巧分享

导读qemu虚拟机卡顿、磁盘越用越大、内存吃紧,根源大多是磁盘格式和内存分配策略没配对,用qcow2格式做按需分配,配合balloon动态内存技术,能解决九成以上的配置顽疾,qemu虚拟机磁盘扩容教程:先分清raw和qcow2磁盘是qemu虚拟机最容易被低估的瓶颈,很多朋友第一天装系统时随手选了raw格式,等用了三……

qemu虚拟机卡顿、磁盘越用越大、内存吃紧,根源大多是磁盘格式和内存分配策略没配对,用qcow2格式做按需分配,配合balloon动态内存技术,能解决九成以上的配置顽疾。

qemu虚拟机磁盘扩容教程:先分清raw和qcow2

磁盘是qemu虚拟机最容易被低估的瓶颈,很多朋友第一天装系统时随手选了raw格式,等用了三个月发现镜像文件比实际数据大了好几倍,才想起来研究扩容,raw镜像的特点是连续分配空间,你创建多大就占多大,性能确实直接但磁盘空间浪费严重,qcow2则属于按需分配,实际写入多少数据才占用多少物理空间,还能做快照和压缩,国内云服务器上跑qemu的玩家,绝大多数场景选qcow2更划算毕竟硬盘空间按GB计费,能省一点是一点。

qcow2镜像扩容实操步骤

假设你用的是qcow2镜像,扩容流程可以梳理成三步:

  • 使用qemu-img resize disk.qcow2 40G命令扩大镜像容量,注意这个操作不会损坏已有数据
  • 启动虚拟机后用fdisk -l查看新空间是否被识别,如果看不到就执行partprobe重新扫描分区表
  • 用growpart /dev/vda 1扩展分区,再执行resize2fs /dev/vda1同步文件系统大小

整个流程最需要注意的是顺序:先扩镜像,再扩分区,最后扩文件系统,顺序反了会出现空间不连续的碎片化问题,如果你用raw镜像也一样,只是把第一步换成qemu-img resize disk.raw 40G,后续步骤完全相同。

raw和qcow2怎么选

qemu虚拟机吧,如何高效配置虚拟机磁盘与内存?虚拟机性能优化技巧分享

对比维度 raw格式 qcow2格式
磁盘占用 创建多大占多大 用多少占多少
快照支持 不支持 原生支持
顺序读写 性能略高 性能稍低但够用
压缩特性 无 支持压缩
适用场景 追求极致性能 日常用途和测试环境

行业共识认为,桌面日常使用、开发测试、多虚拟机并跑的负载,qcow2是更理智的选择,只有数据库、编译等高IO场景才值得上raw。

qemu虚拟机内存设置多大合适?动态调整是关键

内存配置直接影响虚拟机响应速度,很多人的习惯是创建虚拟机时一次性分配固定内存,比如给4GB就永远占着4GB物理内存,这种做法在宿主机资源充裕时没问题,但一旦同时跑多个虚拟机就容易内存不足,qemu提供了balloon机制解决这个问题,它允许运行时动态调整虚拟机内存大小。

balloon动态内存机制

balloon的原理是在虚拟机内部装一个虚拟的"气球"设备,宿主机需要回收内存时,通过这个设备向虚拟机的操作系统施加压力,让空闲内存释放出来,配置方法很简单:

  • 启动虚拟机时加-device virtio-balloon-pci参数
  • 在宿主机用virsh setmem vm-name 2G动态缩减内存
  • 用virsh setmaxmem vm-name 8G --config设定上限

实测下来,一个4GB内存的Windows虚拟机运行轻量办公任务时,balloon能挤出来大概1GB空闲内存给宿主机复用,这就是内存分配"多大合适"的真实答案:没有固定值,够用就行,动态调整才是最优解。

大页内存提升性能

如果你总感觉qemu虚拟机内存读写延迟高,问题可能不在分配多少,而在宿主机内存页表管理方式上,默认4KB小页内存遇上qemu这种大内存虚拟机,会频繁触发缺页中断,性能损耗明显,开启hugepages大页内存能改善:

qemu虚拟机吧,如何高效配置虚拟机磁盘与内存?虚拟机性能优化技巧分享

  • 在宿主机grub配置中追加default_hugepagesz=1G hugepagesz=1G hugepages=8
  • 重启宿主机后确认cat /proc/meminfo | grep HugePages_Total
  • 启动虚拟机追加-mem-path /dev/hugepages -mem-prealloc参数

hugepages启用后,内存访问延迟能降低一截,尤其在多个虚拟机共享宿主机时效果更明显,缺点是配置稍麻烦,不适合毫无Linux基础的新手。

qemu虚拟机磁盘性能优化:IO模式才是卡顿真凶

磁盘格式和内存策略解决的是容量问题,真正让qemu虚拟机用起来卡顿的,大多是磁盘IO模式配置不当,部分用户发现qemu和virtualbox跑同样系统的性能差距明显,往往是qemu默认的写缓存策略太保守了。

cache和aio参数如何组合

qemu的磁盘IO性能主要看两个参数:cache和aio,这两兄弟必须搭配好才能发挥性能,配错了反而更糟。

  • cache=none:绕过宿主机的page cache直接写磁盘,数据安全系数高
  • cache=writeback:先写缓存再批量落盘,速度最快但断电可能丢数据
  • aio=native:使用Linux原生异步IO,配合cache=none是最稳组合
  • aio=threads:用线程池模拟异步IO,不依赖宿主机内核特性

就实际效果而言,cache=none配合aio=native是虚拟化的黄金组合,能在吞吐量和数据安全之间找到平衡点,如果你的qemu虚拟机磁盘读写频繁,试试在启动命令里加上-drive file=disk.qcow2,if=virtio,cache=none,aio=native。

virtio-blk还是virtio-scsi

不少朋友纠结新版qemu该选哪种磁盘总线,virtio-blk是老牌驱动,兼容性好、配置简单,适合普通桌面应用,virtio-scsi功能更全面,支持更大的设备数量和热插拔,数据库这类密集读写的环境更推荐用带队列技术的virtio-scsi,国内服务器上做多盘虚拟化的朋友,据技术社区反馈普遍倾向用virtio-scsi。

qemu虚拟机吧,如何高效配置虚拟机磁盘与内存?虚拟机性能优化技巧分享

qemu和virtualbox性能对比:场景决定选择

很多新手在qemu和virtualbox之间摇摆不定,其实这两个虚拟化方案路线完全不同,qemu作为开源全虚拟化方案,配合KVM内核模块能直接利用硬件虚拟化指令集,性能逼近裸机,virtualbox则属于托管型虚拟机,自带GUI界面,对新手更友好但性能上限有限。

各取所需的选择思路

选择哪种方案看你的具体场景:

  • 追求性能、跑Linux环境开发、有命令行操作基础,qemu配KVM是明显胜出的
  • 只需要在Windows宿主机上偶尔跑个Linux系统,virtualbox上手成本低得多
  • 同时跑多台虚拟机做测试,qemu配合libvirt管理更顺手

业内专家指出,虚拟化方案没有绝对优劣,只有场景适不适合,多数情况下qemu在性能上占据优势,尤其是在国内服务器环境配合KVM模块使用时,性能和稳定性都有保障。

Q&A:qemu虚拟机配置常见疑问

qemu虚拟机磁盘扩容后不识别怎么办

扩容后系统不认新空间,绝大多数情况是分区表没有刷新,执行partprobe让内核重新读取分区表,如果还不行就用fdisk -l对比识别到的磁盘总容量是否已更新,分区类型是GPT的话,有可能需要调整分区起始位置,这时候用growpart配合parted工具处理。

为什么qemu虚拟机内存占用一直居高不下

内存占用居高不下,先检查是不是忘了安装virtio-balloon驱动,Windows系统需要在虚拟机内手动安装对应的驱动,否则balloon设备无法工作,还要看看宿主机是否开了透明大页,开着的状态下qemu进程申请的内存容易被放大统计。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱