虚拟化内存 Ballooning 是什么?什么时候会影响业务
内存 Ballooning 可以回收虚拟机空闲内存,但宿主机内存压力过高时,会引发性能抖动和排查困难。
虚拟化内存比 CPU 更敏感。CPU 可以排队,内存不足时很容易导致交换、抖动甚至服务异常。
Ballooning 是一种内存回收机制。宿主机内存紧张时,通过虚拟机里的 balloon 驱动让虚拟机释放一部分内存给宿主机。它可以提高资源利用率,但也可能影响业务。
如果虚拟机确实有大量空闲内存,ballooning 影响不大。但如果虚拟机内部应用需要内存,强行回收会导致虚拟机内部开始 swap,性能明显下降。
运维要关注:
- 宿主机实际可用内存。
- 虚拟机内部 swap 使用。
- Balloon 驱动是否正常。
- 应用延迟和 OOM 日志。
- 是否存在内存过度承诺。
不要只看平台显示“内存还有余量”。要进入虚拟机内部看应用和系统状态。
生产建议:
- 关键数据库尽量避免内存超分。
- 开发测试可以适度超分。
- 配置监控告警,发现 swap 增长及时处理。
- 迁移和 HA 预留内存,不要把节点压满。
内存超分能省成本,但代价是更复杂的性能风险。
Ballooning 排查清单
内存问题要同时看宿主机和虚拟机内部。宿主机看总压力,虚拟机内部看应用是否已经受影响。
宿主机:
free -h
vmstat 1
sar -r 1
虚拟机内部:
free -h
swapon --show
vmstat 1
dmesg -T | grep -i oom
如果宿主机内存紧张,同时多个虚拟机内部 swap 增长,说明内存超分已经影响业务。
运维建议
- 不要对所有虚拟机使用同一内存策略。
- 数据库、中间件、缓存服务要更保守。
- 开发测试可以使用 ballooning,但要有告警。
- HA 预留资源要算入容量规划。
