虚拟化场景服务器内存超分比例并无统一标准,多数情况下建议控制在1:2到1:4之间,数据库等内存密集型业务不建议开启超分。内存超分玩的是概率游戏,赌的是业务峰值不会同时撞车,比例设得太高,物理内存耗尽时虚拟机直接卡死;设得太低,又浪费了虚拟化的弹性红利,以下内容基于主流虚拟化平台(VMware ESXi、KVM、Proxmox VE)的日常运维实践,不绕弯子,直接讲怎么定这个比例。
内存超分比例多少合适,先看业务负载画像
很多运维朋友一上来就问“1:4行不行”“1:8敢不敢”,其实答案藏在你的业务类型里,虚拟化环境里,内存超分的本质是时间片复用,它赌的是每一台虚拟机不会同时把分配给它的内存全部吃掉。
三类典型业务场景下的比例建议
- 生产型核心业务(数据库、中间件、ERP):建议比例1:1到1:1.5,这类业务内存曲线相对平稳且长期高位运行,超分后的Swap抖动和延迟飙升会让你怀疑人生,行业共识认为,数据库内存一旦落到Swap,性能损耗是数量级的,不是百分比能衡量的。
- 开发测试环境(CI/CD流水线、测试集群):建议比例1:4到1:8,测试业务通常跑完就释放,回收速度快,内存复用效率极高,多配一点超额比例,能明显提升单台物理机的虚拟机密度。
- 桌面虚拟化VDI(办公桌面、培训机房):建议比例1:3到1:5,办公场景大多数人开着虚拟机不干活,或者只用Office套件,内存占用低峰值持续时间短,业内专家指出,VDI场景内存超分是性价比最高的资源优化手段之一。
超分比例不是拍脑袋定的,算一下理论上限
有个粗略的参考公式:超分比例 = 物理内存总量 / 所有虚拟机配置内存总和,举个例子,一台物理机有256GB可用内存,上面跑20台配置为32GB的虚拟机,那么超分比例就是256除以640,约等于1:2.5,但这个公式只算容量,没算突发压力,真正决定比例上限的是峰值并发活跃度。
内存超分和CPU超分有什么区别,不要混为一谈
日常运维中,很多人把CPU超分和内存超分搞混,以为一个能超,另一个也能跟着超,这个误区需要理清楚:CPU超分牺牲的是计算时间片,内存超分赌的是空间复用,两者的资源回收机制完全不一样。
超分机制本质对比
| 对比维度 | CPU超分 | 内存超分 |
|---|---|---|
| 核心原理 | vCPU按时间片轮转调度 | 物理内存页被多台虚拟机共享复用 |
| 资源耗尽表现 | 虚拟机持续高负载,但通常不宕机 | 触发强制回收、Swap,严重时内核OOM Killer杀进程 |
| 相对安全区间 | 1:4到1:8(取决于vCPU核数配置) | 1:1到1:4(取决于业务内存曲线) |
| 容量规划难度 | 较好控制,峰谷差异小 | 难以精确预测,风险更高 |
从表格能看出来,内存超分一旦失效,后果比CPU超分严重得多,CPU吃紧顶多任务排队,内存吃紧直接死给你看,这也是为什么内存超分比例必须保守设置的根本原因。
ESXi和KVM平台默认超分策略差异
VMware ESXi默认不限制内存超分,或者说它默认允许你配置超过物理内存总量的内存,但开启“页面共享”和“压缩”特性后,实际超分比例能达到多少取决于系统负载,KVM/QEMU则通过transparent_hugepage和KSM(内核同页合并)实现内存重复页去重,但KSM在高负载下本身也吃CPU,Proxmox VE默认关闭KSM,需要手动启用。
如果你在ESXi里看到内存超分动不动1:10还能稳住,那不是平台厉害,而是你的业务大多数时间在“假睡觉”,别拿个案当真理,更别拿测试环境的超分比例直接套生产。
设置内存超分前,必须做的容量体检
直接改配置容易被现实打脸,设置超分比例之前,先把现有业务的内存画像摸清楚。具体做法是看持续监控而不是瞬时截图。
- 打开虚拟化平台的性能监控(ESXi的Performance选项卡,或Prometheus+Grafana监控KVM),拉取至少两个星期的历史数据。
- 关注指标:内存已用平均值、内存已用峰值、Swap使用率、Balloon Driver回收量(ESXi特有)。
- 判断依据:如果虚拟机内存平均利用率低于40%,峰值也不超过70%,这个负载有超分空间;如果平均利用率长期超过70%,建议老老实实1:1。
给内存超分留好“安全气囊”
超分比例不是设完就完事的,物理内存要有冗余缓冲区,多数情况下,建议保留物理内存的
10%-15%不分配给任何虚拟机,留给虚拟化层、管理进程和突发峰值,如果你把物理内存吃到95%以上,任何一台虚拟机突然申请内存扩容,都可能引发连锁崩溃。
内存超分设置最佳实践,按平台给出操作路径
确定了业务画像和比例目标,接下来就是落地环节,这里给出最常用的两个平台配置建议。
VMware ESXi内存超分设置路径
ESXi没有一键开启超分的按钮,它的超分是“分配即超分”,你在创建或编辑虚拟机时,直接给虚拟机配置大于物理内存总和的内存总量,系统默认就允许超额分配,关键在于以下两个高级参数:
- Host.MemMaxMemDeadSet(内存水位强制回收阈值):默认值为0,表示不限制,建议设置为物理内存的95%,达到该阈值触发强制内存回收。
- Mem.ShareForce(页面共享强制策略):可设为Force,强制开启透明页共享(TPS),对同源虚拟机模板类场景(克隆的VM)效果明显。
配置时需要注意:过度依赖TPS会导致CPU开销上升,所以别在CPU密集型业务上强行开启强制页面共享。
KVM/Proxmox VE内存超分设置路径
KVM的超分来自libvirt的hard_limit和soft_limit参数,在虚拟机XML配置中:
<memory unit='KiB'>33554432</memory> <currentMemory unit='KiB'>33554432</currentMemory> <memtune> <hard_limit unit='KiB'>33554432</hard_limit> <soft_limit unit='KiB'>26843544</soft_limit> </memtune>
- hard_limit是硬上限,超过这个值系统强制回收或触发OOM,不建议低于配置内存。
- soft_limit是软上限,允许虚拟机超过但会受系统调度控制。
同时建议开启气球驱动(virtio-balloon),让虚拟机主动归还空闲内存,但要注意,内存气球膨胀需要客户机操作系统的驱动配合,Windows虚拟机需要装virtio-win驱动,Linux内核自带。
超分后怎么监控,防止性能雪崩
比例调到1:4不代表一劳永逸,监控是超分策略的驾驶舱仪表盘,没有监控的超分相当于闭眼开车。
显式监控指标
- 主机级别的Swap使用率:一旦开始持续增长,说明内存压力在累积,需要立刻降载。
- 主机内存使用率
:持续超过90%是危险信号。
- 虚拟机Balloon Size(ESXi)/ 气球驱动占用(KVM):气球膨胀越大,说明物理内存越紧张。
- 内核OOM Killer事件:出现一次就是致命的,虚拟机里的进程会被直接杀掉。
近年来,随着容器化业务上量,不少企业把VM超分策略融合了容器调度,采用错峰复用的方式提高整体内存密度,比如把白天跑批的虚拟机和高并发的Web业务虚拟机分布在不同的物理机上,避免所有业务同一时间争抢内存资源。
在生产环境,务必为超分设置末级防线,即配置物理机剩余可用内存低于阈值时自动触发虚拟机迁移(HA Admission Control),而不是等到内存耗尽被动宕机。
关于服务器内存超分,常见疑问解答
内存超分比例设置成1:8,为什么虚拟机还没崩?
这种情况大概率是虚拟机规格配置虚高,业务实际只使用了配置内存的很小比例,比如给VM配了64GB,实际只用8GB,物理内存复用效率极高,1:8也能稳定运行,但这只是特例而非通例,一旦业务量增长或内存泄漏发生,系统会迅速恶化且几乎没有补救时间。
为什么同一比例,ESXi稳定运行但KVM经常卡顿?
两个平台的内存回收机制存在明显差异,VMware ESXi有成熟的页面共享、压缩、Swap分层回收机制,且回收策略更精细;KVM默认回收机制不如ESXi灵敏,依赖Transparent Huge Pages的碎片整理和Swap策略,如果没调优,内存压力上升时响应差异很大,针对KVM平台,建议调低vm.swappiness值到10左右,并显式开启KSM后再评估比例。
数据库虚拟机能不能和普通虚拟机混合超分?
不建议混合部署,数据库虚拟机建议独占物理机或者走1:1比例,因为它的内存曲线振荡幅度小但基数大,一旦普通虚拟机超分业务波动,很容易拖动物理机内存水位,进而影响数据库的IO性能和事务响应时间,将数据库单独放在同物理宿主机的非超分资源池,并把超分虚拟机分配到另一集群,是比较稳妥的做法。
内存超分没有标准答案,但有一条明确底线:核心数据库不做内存超分,生产业务保守起见不超过1:2,开发测试环境不设硬性上限但需保留物理内存15%冗余,设置前摸清业务内存曲线,设完后盯紧Swap和回收指标,超分才能成为降本增效的工具,而不是生产事故的引线。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/661163.html





