内存气球与 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 主动交还页面:在内存压力大的虚机上几乎收不回多少,把它当成紧急手段而不是容量规划工具。
调整前先确认业务基线内存:按监控峰值留出余量后再降配,并保留随时加回去的能力。