温馨提示×

CentOS虚拟机如何进行资源管理

小樊
38
2025-12-21 09:00:56
栏目: 云计算

CentOS 虚拟机资源管理实战指南

一 管理总览与前置检查

  • 在宿主机侧使用 KVM + libvirt 管理虚拟机资源,常用工具包括:命令行 virsh、图形化 virt-manager。在 CentOS 上安装与启动:
    • 安装组件:sudo yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
    • 启动服务:sudo systemctl start libvirtd && sudo systemctl enable libvirtd
  • 确认硬件虚拟化已开启:egrep -c '(vmx|svm)' /proc/cpuinfo,返回值大于 0 表示支持。
  • 基本监控:安装并使用 virt-top 观察各虚拟机的 CPU/内存/I/O 使用情况:sudo yum install -y virt-top && sudo virt-top

二 CPU 资源管理

  • 在线调整 vCPU 数量(热插):可将正在运行的虚拟机 vCPU 数提升到已配置的最大值。
    • 查看状态:virsh vcpucount <vm>
    • 提升在线 vCPU:virsh setvcpus <vm> <N> --live
    • 提升最大 vCPU(重启后生效):virsh setvcpus <vm> <M> --maximum --config
    • 注意:RHEL 9 / CentOS Stream 9 不支持 vCPU 热拔出,不建议在运行中减少 vCPU。
  • 绑定 vCPU 到物理核(减少缓存抖动、提升性能):
    • 示例(将 vcpu0 绑定到物理核 1–4,排除核 2):virsh vcpupin <vm> 0 --cpuset 1-4,^2
  • 虚拟机内核对 CPU 的亲和与份额(可选):
    • 使用 cgroups 限制某进程的 CPU 占用:将 cpu.cfs_quota_us=50000cpu.cfs_period_us=100000 写入对应 cgroup,即可限制为约 50% 单核;将进程 PID 写入该 cgroup 的 tasks 文件生效。
    • 使用 cpuset 将进程限定到指定 CPU/内存节点:echo 0 > cpuset.cpus; echo 0 > cpuset.mems 后再写入 tasks。

三 内存与交换分区管理

  • 在线调整内存(Ballooning):
    • 查看当前/最大内存:virsh dominfo <vm> | grep 内存
    • 在线增/减内存:virsh setmem <vm> <size_in_KiB> --live
    • 调小内存通常需要先将虚拟机内存上限调小(关机修改配置),再在线下调当前内存。
  • 永久变更 vCPU/内存配额:
    • 关机编辑配置:virsh edit <vm>,调整 <memory unit='KiB'>…</memory><vcpu>…</vcpu> 等字段,保存后启动生效。
  • 交换分区与策略(内存紧张时的缓冲):
    • 创建 4G 交换文件并启用:
      • dd if=/dev/zero of=/var/swapdata bs=1K count=4194304
      • mkswap /var/swapdata && chmod 0600 /var/swapdata && swapon /var/swapdata
      • 开机自动挂载:在 /etc/fstab 追加 /var/swapdata swap swap defaults 0 0
    • 调整使用倾向:sysctl vm.swappiness=10(数值越大越倾向使用 swap,默认通常为 60;数据库等低延迟场景可适当降低)。

四 磁盘与 I O 资源管理

  • 在线扩容虚拟磁盘容量(宿主机侧):
    • 扩展虚拟磁盘后,在虚拟机内识别新容量:echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan
    • 分区扩容(示例以整盘 sda 为例):growpart /dev/sda 1
    • 文件系统扩容:
      • XFS:xfs_growfs /
      • EXT4:resize2fs /dev/sda1
  • 使用 LVM 管理磁盘(灵活分配与后续扩容):
    • 识别新盘:lsblk;创建 PV/VG/LV:pvcreate /dev/sdb; vgcreate vg1 /dev/sdb; lvcreate -L 10G -n lv1 vg1
    • 格式化与挂载:mkfs.xfs /dev/vg1/lv1; mkdir -p /data; mount /dev/vg1/lv1 /data
    • 永久挂载:在 /etc/fstab 添加 /dev/vg1/lv1 /data xfs defaults 0 0
  • 磁盘 I/O 限流(宿主机侧,防止单虚机打满存储):
    • 权重(相对比例):virsh blkiotune <vm> --weight 700 --live
    • 吞吐/IOPS 上限(示例:总吞吐 10MB/s,总 IOPS 30):
      • virsh blkdeviotune <vm> vda --total-bytes-sec 10485760 --total-iops-sec 30 --live
  • 网络带宽限流(宿主机侧):
    • 动态附加带带宽限制的网卡:virsh attach-interface <vm> network default --inbound average=1000,peak=5000,burst=1024 --outbound average=128,peak=256,burst=256(单位 KB/s

五 性能优化与监控实践

  • vCPU 模型与 NUMA 亲和:
    • 对齐主机 CPU 特性:virt-xml <vm> --edit --cpu host-model(ARM64 可用 --cpu host-passthrough
    • 启用自动 NUMA 与放置策略:virt-xml <vm> --edit --vcpus placement=autovirt-xml <vm> --edit --numatune mode=preferred
  • 内存与存储优化要点:
    • 宿主机启用 KSM(内存去重,适合多虚机同镜像场景):echo 1 > /sys/kernel/mm/ksm/run
    • 宿主机与虚机启用 透明巨页 THP(大页减少页表开销,部分负载有收益):echo always > /sys/kernel/mm/transparent_hugepage/enabled
    • 虚机磁盘使用 virtio 驱动、合适的缓存策略(如 none/writeback)与 AIO 模式,可显著提升 I/O 性能。
  • 持续监控与容量规划:
    • 使用 virt-top 实时查看资源占用;结合 virsh dominfovirsh vcpucount 等命令核对配置与运行状态,必要时做横向扩容或降配。

0