Skip to content

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 KiB

2. 调整 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
done

4. 验证结果

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运行中虚拟机永久调整

注意事项

  1. 降配必须成对调整setmaxmem/setmemsetvcpus --maximum/setvcpus 要一起改,否则上限不变,后续无法在该上限内弹性调整。
  2. 热添加易、热移除难:多数系统支持在线增加 vCPU/内存(需内核支持热插拔),但在线缩减通常不生效,降配建议关机后操作。且在线扩容不能超过 Max 上限,详见 virsh 热扩容 CPU/内存受限与重启扩容实战
  3. 内存单位virsh dominfo 显示单位为 KiB,8G = 8388608 KiB;setmaxmem/setmem 支持直接使用 8G 单位。
  4. 关机状态调整shut off 状态下只能使用 --config,修改后直接生效,无需额外操作。

相关文档

总结

  • 核心命令四连:setvcpus --maximumsetvcpussetmaxmemsetmem,均加 --config
  • 关机虚拟机降配最简单,改完即生效;运行中虚拟机降配建议先关机再操作。
  • 调整后务必用 virsh dominfo 核对 CPU(s)、Max memory、Used memory 三项。