kvm支持运行中动态调整内存,需启用memory hotplug且guest内核支持;关机后修改xml配置则通用稳妥。 vmware/virtualbox必须关机调整,重启后生效。

Linux 虚拟机调整 CPU 和内存大小,主要分两类场景:一类是修改虚拟机资源配置(如 VMware、VirtualBox、KVM),另一类是在运行中动态调整(仅限部分平台支持)。关键区别在于——是否需要关机,以及是否依赖底层虚拟化技术特性。
关机后修改资源配置(通用、最稳妥)
适用于 VMware Workstation、VirtualBox、KVM/qemu 等主流平台,操作前必须关闭虚拟机。
-
VMware / VirtualBox:打开虚拟机设置 → 进入“处理器”或“系统”选项卡 → 直接拖动或输入 CPU 核心数、内存 MB 数 → 保存后启动即可生效。无需额外命令,重启后
lscpu和free -h即可验证。 -
KVM(virsh):先执行
virsh shutdown vmname,再运行virsh edit vmname,修改 XML 中的<vcpu>2</vcpu>和<memory unit="KiB">4194304</memory>(即 4 GiB)等字段 → 保存退出后执行virsh define /etc/libvirt/qemu/vmname.xml→ 启动虚拟机。
运行中动态调整(仅 KVM 支持,且需配置启用)
KVM 允许热添加 CPU 和内存,但要求:虚拟机已启用 memory hotplug + vCPU hotplug,且 Guest 内核支持(现代 CentOS/RHEL 7+、Ubuntu 18.04+ 默认支持)。
- 查看当前状态:
virsh dominfo vmname | grep -E "(CPU|Memory)" - 热添加 1 个 vCPU:
virsh setvcpus vmname 3 --live --config(从 2 升到 3) - 热添加 1 GiB 内存:
virsh setmem vmname 3145728 --live --config(单位 KiB,3 GiB = 3145728 KiB) - Guest 内需手动在线启用新资源:
echo 1 > /sys/devices/system/cpu/cpu2/online;内存会自动联机,也可用virsh attach-device挂载新内存设备。
不改虚拟机配置,只优化内存使用(临时缓解)
若无法重启或调整硬件资源,可通过软件层缓解压力:
- 增加交换空间:用
fallocate -l 2G /swapfile创建文件 →mkswap /swapfile→swapon /swapfile→ 加入/etc/fstab持久化。 - 调低 swappiness(默认 60):设为
vm.swappiness=10可减少无谓换出,适合内存充足场景。 - 清理缓存(非释放真正内存):
echo 3 > /proc/sys/vm/drop_caches(仅调试用,生产慎用)。
注意事项与避坑点
调整不是无代价的:
- 所有图形化工具(VMware/VirtualBox)修改后,必须重启虚拟机才生效,运行中点击“应用”只是写入配置,不触发重载。
- Azure/AWS/GCP 等云平台调整 VM 大小,本质是迁移并重建实例,会丢失临时磁盘、重置公网 IP(除非配置静态 IP)。
- 内存设得过高可能引发宿主机 OOM:宿主机物理内存不足时,Linux 内核会杀进程(OOM Killer),优先干掉占用大的虚拟机进程。
- 分区表类型影响扩容能力:MBR 分区最多 4 个主分区,若已有 4 个,扩展磁盘后可能无法新增分区,建议优先用 GPT。











