首页/云/云平台与虚拟化速查/内存气球(balloon)与 setmem
虚拟化操作94 条

内存气球(balloon)与 setmem

virtio-balloon 让宿主在 guest 配合下回收闲置内存,实现动态降配;virsh setmem 调整当前可用内存,上限受域定义约束。

云平台与虚拟化速查云更新于 2026-10-13

内存气球与 setmem

virtio-balloon 是一套宿主与 guest 协作的内存调节机制:宿主请求回收,guest 内驱动把闲置页交还,实现运行中的动态降配。virsh setmem 用来调整当前可用内存,取值范围受域定义中的内存上限约束。它的特点是「慢且依赖配合」:guest 里没驱动或内存本来就紧张时,回收不会立刻见效。

基本信息

设备声明域定义中的 memballoon 段落,多数发行版默认启用
查看状态virsh dommemstat vm1 查看当前内存与气球统计
调整命令virsh setmem vm1 2G --live 或 --config 分别作用于运行态与定义
上限约束受域定义中的内存值与最大内存能力限制
前提条件guest 内需有 balloon 驱动,否则动态调整不生效

典型使用场景

  • 业务低峰降配:夜间业务轻量时回收内存给其他虚机使用
  • 内存紧张应急:宿主内存不足时对非关键虚机做临时回收
  • 成本优化:评估虚机实际内存需求,为长期降配提供依据
  • 容量验证:确认气球机制在自己的 guest 镜像里确实可用
  • 演练测试:验证内存调节过程对业务的影响范围

查看与动态降配

查看与动态降配
virsh dommemstat vm1                     # 内存与气球统计
virsh setmem vm1 2G --live --config      # 运行态与定义同时调整
virsh dominfo vm1 | grep -i memory        # 核对内存上限
# 确认 guest 内已加载 balloon 驱动
lsmod | grep virtio_balloon

相关命令

命令作用注意
dommemstat查看内存分配与可用量结合业务高峰判断回收空间
setmem调整当前可用内存超出上限直接报错
dominfo查看域的内存配置确认最大内存与当前值
domstats --balloon批量统计内存与气球状态适合巡检与留档
guest 缺少气球驱动或内存繁忙时回收缓慢;回收过猛会触发 guest 内内存不足,业务进程可能被直接终止。
回收依赖 guest 主动交还页面:在内存压力大的虚机上几乎收不回多少,把它当成紧急手段而不是容量规划工具。
调整前先确认业务基线内存:按监控峰值留出余量后再降配,并保留随时加回去的能力。

易错点

  • 以为 setmem 立即回收:气球依赖 guest 配合,忙时见效慢
  • 未装 balloon 驱动的 guest:动态调整不生效,命令却不报错
  • 按当前空闲值降配而不看峰值,业务高峰触发内存不足
  • 只改运行态未改定义,重启后内存又回到原值,问题反复出现

数据来源与参考

  • libvirt 文档:Memory balloon
  • virsh 手册:setmem / dommemstat
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌