PVE 虚拟机突然卡顿:从 88% 碎片率到 CPU 模型优化的完整排查记录

一、问题现象

  • 系统:Windows 10 LTSC(VMID 100)
  • 宿主机:Dell R930,RAID5 SAS 10K HDD,PVE 9.1.7
  • 配置:16 vCPU / 32GB RAM / 100GB qcow2 磁盘

症状:

  • 打开"此电脑"、资源管理器卡顿,鼠标持续转圈
  • 启动 Excel、浏览器等软件明显变慢
  • 系统整体响应"一顿一顿",操作有延迟感
  • 关键线索:同一台 PVE 上的其他 VM(如 VM 104)运行流畅

二、排查过程

阶段 1:排除硬件瓶颈

既然其他 VM 很快,首先排除宿主机硬件问题:

  • 磁盘 I/O 性能测试:顺序写入 184 MB/s,4K 随机读仅 5.4 MB/s
  • 磁盘队列长度:正常(0)
  • 网络延迟:1ms(内网正常)
  • CPU 负载:空闲时 52%(异常!)

初步判断:不是单纯的 HDD 慢,而是 VM 内部有额外开销。

阶段 2:排查软件层

依次排查了以下可能:

排查项 结果 结论
Windows Search 已禁用 无关
SysMain/SuperFetch 已禁用 无关
Windows Defender 组策略禁用 无关
页面文件 2GB,使用正常 无关

关键发现:CPU 空闲负载高达 52%,说明系统调用/上下文切换有巨大开销。

阶段 3:对比正常 VM

对比同一 PVE 上"很快"的 VM 104(Windows Server 2022):

配置项 VM 100(卡顿) VM 104(正常)
CPU host x86-64-v2-AES
cores 16 4
磁盘格式 qcow2 qcow2
缓存 writeback writeback

第一个根因浮现cpu: hostx86-64-v2-AES 的差异。

阶段 4:磁盘深层分析

在 PVE 宿主机上检查 qcow2 文件:

qemu-img check /mnt/pve-data/images/100/vm-100-disk-0.qcow2

结果触目惊心:

516508/1638400 = 31.53% allocated, 88.36% fragmented, 81.75% compressed clusters

88.36% 碎片率! 这是第二个根因。

追溯源头:前段时间为了压缩备份体积,在 Windows 内执行了 sdelete -C C:,将空闲空间全部写 0。虽然临时文件已删除,但 qcow2 的簇映射表保留了大量空洞分配,导致随机 I/O 时磁头频繁寻道。


三、根因分析

根因 1:CPU 模型配置不当

PVE 默认的 cpu: host 会将宿主机的所有 CPU 特性暴露给虚拟机,包括:

  • PCID(Process-Context Identifiers)
  • INVPCID
  • Spectre/Meltdown 缓解相关标志位

当 Windows 检测到这些特性后,会自动启用 KPTI(Kernel Page Table Isolation)IBPB/IBRS 等缓解措施。每一次系统调用、每一次上下文切换,都要额外开销——这正是"打开任何东西都卡"的根本原因。

x86-64-v2-AES 是一个受限的 CPU 模型,不包含这些缓解标志,Windows 不会启用额外的安全开销。

根因 2:qcow2 碎片化

sdelete -C 的工作原理是将磁盘剩余空间全部填充为 0。这个过程中:

  1. 创建一个巨大的临时文件,占用大量不连续的 qcow2 簇
  2. 删除临时文件后,NTFS 标记为空闲
  3. qcow2 的 L2 表和 refcount 表已经记录了大量分配
  4. 结果是 qcow2 内部产生大量"已分配但逻辑空洞"的簇

88.36% 的碎片率意味着:读取一个 1MB 的文件,可能需要在 qcow2 内部跳转 14-15 次,HDD 磁头寻道时间累积,导致 4K 随机读暴跌至 5.4 MB/s。


四、解决方案

步骤 1:修改 CPU 模型

# 关机
qm stop 100

# 修改 CPU 模型
qm set 100 --cpu x86-64-v2-AES

# 启动
qm start 100

效果:CPU 空闲负载从 52% 降至 8%,系统响应立即改善。

步骤 2:整理磁盘碎片

由于碎片率过高,直接在 PVE 上转换磁盘格式重建簇映射:

# qcow2 → raw(消除所有 qcow2 层碎片)
qemu-img convert -f qcow2 -O raw \
  /mnt/pve-data/images/100/vm-100-disk-0.qcow2 \
  /mnt/pve-data/images/100/vm-100-disk-0.raw

# 修改 VM 使用 raw
qm set 100 --scsi0 pve-data:100/vm-100-disk-0.raw,cache=writeback,discard=on,iothread=1,size=100G

qm start 100

验证性能改善后,转回 qcow2(便于后续迁移):

# 关机
qm stop 100

# raw → qcow2(使用预分配减少未来碎片)
qemu-img convert -f raw -O qcow2 -o preallocation=metadata,cluster_size=65536 \
  /mnt/pve-data/images/100/vm-100-disk-0.raw \
  /mnt/pve-data/images/100/vm-100-disk-0.qcow2

# 验证碎片率
qemu-img check /mnt/pve-data/images/100/vm-100-disk-0.qcow2
# 结果:0.8% fragmented ✅

# 修改配置
qm set 100 --scsi0 pve-data:100/vm-100-disk-0.qcow2,cache=writeback,discard=on,iothread=1,size=100G

qm start 100

五、效果验证

指标 优化前 优化后 提升
CPU 空闲负载 52% 8% -85%
顺序写入 184 MB/s 1071 MB/s +482%
64K 随机读 70 MB/s 92 MB/s +32%
4K 随机读 5.4 MB/s 5.7 MB/s +5%(HDD 物理极限)
qcow2 碎片率 88.36% 0.8% -99%

实际体验:打开资源管理器、Excel、浏览器恢复正常,无卡顿感。


六、迁移备份建议

如果后续需要迁移到新 PVE 主机,建议流程:

# 1. Windows 内执行 sdelete(将空闲空间写 0,便于压缩)
sdelete -C C:

# 2. 关机
qm stop 100

# 3. 压缩转换(体积最小)
qemu-img convert -c -O qcow2 \
  /mnt/pve-data/images/100/vm-100-disk-0.qcow2 \
  /mnt/pve-data/backup/vm-100/vm-100-disk-0.qcow2

# 4. 复制到新机器(rsync 显示进度)
rsync -avh --progress \
  /mnt/pve-data/backup/vm-100/vm-100-disk-0.qcow2 \
  root@新PVE:/mnt/pve-data/images/100/

# 5. 新机器上检查碎片率,如高于 20% 再整理
qemu-img check /mnt/pve-data/images/100/vm-100-disk-0.qcow2

注意sdelete -C 会产生 qcow2 碎片,迁移后建议检查并重新 qemu-img convert 整理。


七、总结

本次故障由两个因素叠加导致:

  1. cpu: host 配置让 Windows 启用了 Spectre 缓解措施,造成系统调用开销暴增(空闲负载 52%)
  2. sdelete -C 导致 qcow2 碎片率高达 88.36%,4K 随机 I/O 性能暴跌

经验教训:

  • PVE 上运行 Windows 虚拟机,建议 CPU 模型使用 x86-64-v2-AES 而非 host,避免不必要的缓解措施开销
  • sdelete -C 后务必在 PVE 层重新 qemu-img convert 整理 qcow2,否则碎片会严重影响 HDD 上的随机 I/O 性能
  • 日常排查应优先对比"正常"与"异常"的配置差异,往往能快速定位根因

环境信息:Dell R930 / E7-4820 v4 / RAID5 SAS 10K HDD / PVE 9.1.7 / Windows 10 LTSC

声明:本站分享的所有资源来源于公开互联网搜集和网友投稿提供,仅供个人学习研究使用,若发现您的权利被侵害,请联系zjqa@qingantec.com,我们会尽快处理。

给TA打赏
共{{data.count}}人
人已打赏
虚拟化

PVE虚拟机三种常见的网络配置方式。IPV4+IPV6

2025-9-22 14:05:46

Linux

CentOS7下btpanel源码编译安装PHP(7.4版本)

2023-10-29 13:57:16

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索