在线调整资源是什么
virsh setvcpus 与 setmem 用于在虚机运行中调整 vCPU 与内存。CPU 热插拔要求 guest 内核与 ACPI 支持,而且定义里的 vcpu 上限要留出空间;内存调整走 balloon(气球)机制,调小是请 guest 归还内存,调大则受定义的最大内存限制。
基本信息
| 调整 vCPU | virsh setvcpus vm1 4 --live --config |
|---|---|
| 内存气球 | virsh setmem vm1 2GiB --live(调小) |
| 内存上限 | virsh setmaxmem(通常需关机) |
| 查看气球 | virsh dommemstat vm1 |
| 前提条件 | guest 支持 CPU 热插拔与 ACPI;定义中的 vcpu 与最大内存要有余量 |
| 持久化 | 加 --config 才会写入下次启动的定义 |
典型使用场景
- 业务高峰临时增加 vCPU(guest 支持热插拔时)
- 排查内存异常时用 balloon 临时收缩做对照实验
- 虚机规格配错后先在线纠正,再同步修改模板
- 验证 balloon 是否真的生效,看 guest 是否配合归还内存
- 在测试环境临时压缩资源占用,缓解宿主内存压力
在线调整与核对
在线调整与核对
virsh dominfo vm1 | grep -E 'CPU|memory' # 先看当前 vCPU 与内存上下限
sudo virsh setvcpus vm1 4 --live --config # 在线加到 4 个 vCPU,并写回定义
sudo virsh setmem vm1 2GiB --live --config # 用气球把内存调整到 2GiB
virsh dommemstat vm1 # 看 available 判断 guest 是否真的归还
virsh dumpxml vm1 | grep -A2 '<memory' # 核对 memory 与 currentMemory 是否一致
virsh setmaxmem vm1 4GiB # 提高最大内存(多数场景需先关机)几个命令的差别
| 命令 | 作用范围 | 限制 |
|---|---|---|
| setvcpus | 在线增减 vCPU | guest 需支持热插拔,超出定义上限直接失败 |
| setmem | 通过 balloon 调整内存 | 上限受定义最大内存约束,取决于 guest 是否配合 |
| setmaxmem | 调整定义的最大内存 | 一般要求虚机关机 |
| dommemstat | 查看气球相关统计 | 未配 balloon 设备时没有有效数据 |
balloon 是协商机制:guest 压力大时可以拒绝归还内存,所以要看 dommemstat 里的 available 变化,而不是只看命令返回成功。若 guest 内根本没有 balloon 驱动,这类统计会一直为空。
加 vCPU 不必然更快:guest 内的调度与锁竞争可能让性能反而下降。调整前先看宿主与 guest 两层的实际负载,调整后用同一套基准测试对比。