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

虚拟机硬件配置怎么调?性能优化参数有哪些?

导读虚拟机硬件配置的调整核心是“按负载定配比、按瓶颈调参数”:CPU 先看并发与单核性能,内存决定单机密度上限,磁盘 IO 往往才是真正的短板,网络优先上半虚拟化驱动,参数优化则围绕 CPU 绑定、大页内存、IO 调度器和缓存策略四项展开,配置之前先想清楚:调优是把参数调到匹配负载很多人一上手就想把虚拟机的核数和内……

虚拟机硬件配置的调整核心是“按负载定配比、按瓶颈调参数”:CPU 先看并发与单核性能,内存决定单机密度上限,磁盘 IO 往往才是真正的短板,网络优先上半虚拟化驱动,参数优化则围绕 CPU 绑定、大页内存、IO 调度器和缓存策略四项展开。

配置之前先想清楚:调优是把参数调到匹配负载

很多人一上手就想把虚拟机的核数和内存拉到最大,结果宿主机资源被透支,所有虚拟机都卡顿,虚拟机不是物理机的简单切分,它以共享宿主机的 CPU 时间片、内存页和 IO 队列为基础,各项资源之间相互制约,先看瓶颈落在哪,再决定调哪个参数,比统一提高配置要有效得多。

决策顺序建议按下面这条路径走:

  • 先用 top、vmstat 1、iostat -x 1 看宿主机整体占用,确认是 CPU 争抢、内存交换还是磁盘等待。
  • 进虚拟机内部重复同样的观察,判断卡顿来自客户机内部还是宿主机层。
  • 只有定位到具体瓶颈,才去动对应的虚拟化参数,否则调了也看不到收益。

虚拟机CPU核心数分配多少合适?先分清物理核心和虚拟核心

vCPU 超额分配有安全边界

业内普遍经验是 vCPU 与物理逻辑核心的比例控制在 2:1 到 4:1 之间,超出这个范围,CPU 调度延迟会明显上升,判断是否已经超标的直接指标是 CPU 就绪时间,VMware 里看 %RDY,KVM 里看 virsh domstats 输出的 vcpu.X.delay,一旦持续高于 5%,说明虚拟机在排队等物理核心,加 vCPU 只会让排队更长。

CPU 型号要透传给客户端

KVM 默认给虚拟机一个较老的通用 CPU 模型,某些指令集被屏蔽,跑数据库或编译任务会莫名变慢,把 CPU 模式改成 host-passthrough,让客户机直接看到宿主机的完整指令集:

virsh edit vm1
# <cpu mode='host-passthrough' check='none'/>

改完需要关机重启生效,热迁移场景则改用 host-model 保持兼容性。

关键业务做 CPU 绑定

对延迟敏感的服务,让 vCPU 固定在指定物理核上,避免调度器来回迁移带来的缓存失效:

virsh vcpupin vm1 0 2
virsh vcpupin vm1 1 3
virsh emulatorpin vm1 4-5

绑定前先用 numactl --hardware 查看 NUMA 拓扑,跨 NUMA 节点访问内存的延迟明显高于本地节点访存,把虚拟机的 vCPU 和内存都放在同一个节点上,是最省钱的一次性能提升。

内存配置:分配多了浪费,分配少了交换

把宿主机交换关掉,把客户机交换管好

宿主机一旦开始用 swap 给虚拟机内存做交换,性能会断崖式下跌,宿主机上把 vm.swappiness 调到 10 甚至更低,是行业共识做法,客户机内部则相反,数据库类实例建议 vm.swappiness 保持较低值,让热数据留在内存里;Web 类实例可以维持默认。

大页内存能省下不小的 TLB 开销

内存密集型虚拟机开启透明大页,把模式设为 madvise,再由业务显式申请,比全局 always 更可控:

cat /sys/kernel/mm/transparent_hugepage/enabled
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

对 Oracle、Redis 这类大内存实例,直接在宿主机预留 2M 大页,在虚拟机 XML 里声明 <memoryBacking><hugepages/></memoryBacking>,效果比依赖透明大页更稳定,注意大页是预分配的,宿主机看不到收益时不要盲目开启,否则内存会被白白占住。

内存气球驱动别关

气球驱动让宿主机在内存紧张时回收客户机闲置页,是维持单机部署密度的重要机制,装了 VMware Tools 或 virtio-balloon 驱动的虚拟机,优先开启这一能力。

存储与网络:多数性能问题其实出在这两处

磁盘缓存策略选错,等于白调

KVM 的磁盘缓存有四种常见组合,选择取决于数据安全性要求:

cache 模式 数据安全性 适用场景
none + io=native 高,直写落盘 数据库、生产业务
writeback 一般,断电可能丢数据 临时测试、可重建环境
directsync 最高 强一致要求场景
unsafe 低 一次性批处理

生产环境推荐 cache=none 加 io=native,再给磁盘配独立 IO 线程:

<driver name='qemu' type='qcow2' cache='none' io='native' discard='unmap'/>
<iothreads>2</iothreads>

qcow2 适合配快照,raw 适合纯性能场景,qcow2 首次创建时用 qemu-img create -f qcow2 -o preallocation=metadata 预分配元数据,能减少写入时的碎片化。

网络用半虚拟化驱动,多队列别忘开

virtio-net 加 vhost-net 是 KVM 环境下成熟的组合,比模拟 e1000 网卡的中断开销低得多,多核虚拟机把队列数开到和 vCPU 数量接近:

<interface type='network'>
  <model type='virtio'/>
  <driver name='vhost' queues='4'/>
</interface>

客户机内还要确认多队列已经生效,用 ethtool -l eth0 查看,再按需调整 ethtool -L eth0 combined 4。

云服务器和本地虚拟机性能对比:能调的和调不了的

这是选型时绕不开的问题。本地自建虚拟机的优势在于参数完全可控,CPU 绑定、NUMA 亲和、大页内存、IO 调度器都能改;云服务器的优势在于弹性,但绝大多数调优参数不开放给租户。

无论在哪跑,下面这几个参数都值得检查:

  • CPU 就绪时间:云上看监控面板的 CPU 使用率与负载偏离程度,偏离大往往意味着宿主争抢。
  • 磁盘 IOPS 上限:云盘的性能通常与容量档位挂钩,容量买小了,IOPS 天花板就低。
  • 网络多队列:部分云厂商默认关闭,需要在控制台或镜像内开启。
  • 突发性能实例:积分耗尽的实例会被限频,不适合持续性负载。

业内专家指出,云上选型更接近“挑规格”而非“调参数”,把精力放在规格匹配和监控告警上,比钻研系统内核参数收益更高。

开发测试环境虚拟机配置推荐:别照搬生产规格

研发和测试环节的虚拟机,追求的是启动快、能克隆、可回滚,而不是跑分。

  • 日常开发机:4 vCPU、8GB 内存、50GB 磁盘,开启快照,编译任务重的给到 8 vCPU。
  • 集成测试环境:8 vCPU、16GB 内存,磁盘换 NVMe,避免用例跑一半卡在 IO。
  • CI 构建节点:多核优先,单核性能同样重要,构建任务对单线程延迟敏感。

克隆出来的虚拟机记得重新生成机器标识和 MAC 地址,否则在同一网段会出现冲突,KVM 下用 virt-sysprep 清理模板,能省掉不少重复配置。

虚拟机性能优化参数有哪些?一份可直接照抄的清单

宿主机层

sysctl -w vm.swappiness=10
sysctl -w fs.aio-max-nr=1048576
sysctl -w net.core.somaxconn=4096

同时确认 irqbalance 处于运行状态,高负载网卡场景可手动把中断绑到不同物理核。

客户机层

  • 文件句柄上限:/etc/security/limits.conf 里调整 nofile。
  • 网络队列:net.core.somaxconn、net.ipv4.tcp_tw_reuse 按业务并发调整。
  • 磁盘调度器:NVMe 盘用 none,SATA/SAS 盘在虚拟化场景下 mq-deadline 通常比 cfq 更稳。

监控与验证

调完必须有数据验证,否则只是心理安慰:

iostat -x 1        # 看 await 和 %util
virsh domstats vm1 # 看 vCPU 延迟和内存气球状态
fio --name=test --rw=randwrite --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting

改动一次只调一个参数,记录前后对比,这是排查性能问题最朴素也最有效的方法。

预算怎么算:虚拟机价格与性能的性价比拐点

本地自建的成本不只在硬件,还包括机房电费、带宽、UPS 和运维人力,一台能稳定承载十余台中等规格虚拟机的宿主机,三年总拥有成本折算下来,未必比按需付费的云主机便宜,但可控性更强,云上则要留意加核比加内存贵的普遍规律,CPU 密集型业务优先选计算型规格,内存密集型优先选内存型,避免在通用型规格上为用不到的 CPU 付费。

虚拟机硬件配置与性能优化Q&A

给虚拟机分配的 vCPU 越多,运行就越快吗?

不是,vCPU 超过物理核心承载能力后,调度器需要频繁切换上下文,缓存命中率下降,性能反而倒退,判断依据是 CPU 就绪时间,持续偏高就该减少 vCPU 或迁移负载。

虚拟机磁盘写入慢,最常见的原因是什么?

按出现频率排,依次是缓存模式选了 writeback 但底层存储本身慢、qcow2 未预分配导致写放大、IO 线程不足造成队列积压,先用 iostat -x 1 看 await 和 %util,再对照上文的缓存策略表逐项排查。

虚拟机内部看到的 CPU 主频为什么和宿主机不一致?

这是 CPU 模型透传未开启的典型表现,客户机读到的是虚拟化层模拟的通用型号,指令集被裁剪,主频信息也不准确,改为 host-passthrough 后,客户机才能看到宿主机的完整 CPU 特性。

虚拟机调优的本质,是把有限的物理资源按业务真实需求切开,再用少量关键参数把切开的缝隙补上,配置给对了,参数调准了,一台中等规格的宿主机也能稳稳跑住十几台业务虚拟机。

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