主题
virsh 调整虚拟机 CPU/内存规格实战
以 sza122030 / sza122031 两台 KVM 虚拟机由 8核32G 调整为 4核8G 为例,说明 virsh 在线/离线调整 vCPU 与内存规格的完整操作与注意事项。
背景
资源池回收场景:两台虚拟机(sza122030、sza122031,同规格)实际负载低,需将规格从 8 vCPU / 32G 内存 降配为 4 vCPU / 8G 内存,释放宿主机资源。
注:文中主机名按脱敏规范处理,操作命令为通用 virsh 命令,可直接复用。
操作步骤
1. 查看当前状态与规格
bash
virsh list --all # 确认虚拟机状态
virsh dominfo sza122030 # 查看 CPU/内存配置调整前输出(关键项):
State: shut off
CPU(s): 8
Max memory: 33554432 KiB
Used memory: 33554432 KiB2. 调整 vCPU(4 核)
bash
virsh setvcpus sza122030 4 --config --maximum # 最大 vCPU 数
virsh setvcpus sza122030 4 --config # 当前 vCPU 数3. 调整内存(8G)
bash
virsh setmaxmem sza122030 8G --config # 最大内存
virsh setmem sza122030 8G --config # 当前内存(8G = 8388608 KiB)对 sza122031 执行相同操作,可用 for 循环批量处理:
bash
for vm in sza122030 sza122031; do
virsh setvcpus "$vm" 4 --config --maximum && virsh setvcpus "$vm" 4 --config
virsh setmaxmem "$vm" 8G --config && virsh setmem "$vm" 8G --config
done4. 验证结果
bash
virsh dominfo sza122030 | grep -E 'CPU|memory'
virsh dominfo sza122031 | grep -E 'CPU|memory'调整后输出:
CPU(s): 4
Max memory: 8388608 KiB
Used memory: 8388608 KiB两台虚拟机均已调整为 4核 8G,因处于关机状态,配置直接生效,下次启动即为新规格。
关键参数说明
| 参数 | 作用 | 适用场景 |
|---|---|---|
--config | 修改持久化 XML 配置,下次启动生效 | 关机或需重启生效的调整 |
--live | 立即作用于运行中的虚拟机,不持久化 | 在线热调整 |
--maximum | 调整上限值(Max memory / Max vCPU) | 降配时必须同时调整 |
--current | 同时作用于 live + config | 运行中虚拟机永久调整 |
注意事项
- 降配必须成对调整:
setmaxmem/setmem、setvcpus --maximum/setvcpus要一起改,否则上限不变,后续无法在该上限内弹性调整。 - 热添加易、热移除难:多数系统支持在线增加 vCPU/内存(需内核支持热插拔),但在线缩减通常不生效,降配建议关机后操作。且在线扩容不能超过 Max 上限,详见 virsh 热扩容 CPU/内存受限与重启扩容实战。
- 内存单位:
virsh dominfo显示单位为 KiB,8G = 8388608 KiB;setmaxmem/setmem支持直接使用8G单位。 - 关机状态调整:
shut off状态下只能使用--config,修改后直接生效,无需额外操作。
相关文档
总结
- 核心命令四连:
setvcpus --maximum→setvcpus→setmaxmem→setmem,均加--config。 - 关机虚拟机降配最简单,改完即生效;运行中虚拟机降配建议先关机再操作。
- 调整后务必用
virsh dominfo核对 CPU(s)、Max memory、Used memory 三项。