外观
IO 延迟高
适用范围
客户机普遍反应变慢,PVE 节点 Summary 页面的 CPU 图表里 IO delay 占比明显偏高,或者 iostat 显示 await 数值很大。
不适用于:单独某个应用变慢但存储层指标(iostat、zpool iostat)看起来正常——那属于应用层或者客户机内部的问题,不在本文范围。
开始排查前
记录:
- 什么时候开始的,是持续性的还是集中在某个时间段(比如备份窗口、scrub 期间)。
- 受影响的是所有客户机,还是集中在用同一个存储的那几台。
- 最近有没有加过新的客户机、扩大过某台客户机的磁盘、或者调整过存储配置。
排查步骤
1. 确认现象:是不是真的 IO 瓶颈
sh
top
iostat -x 2 5看 top 里的 %wa(等待 IO 的 CPU 占比)和 iostat -x 里各设备的 %util、await。%util 接近 100% 且 await 明显偏高,说明确实是存储设备本身在排队,不是 CPU 或内存的问题。
2. 定位是哪个物理设备
iostat -x 的输出会列出具体的块设备名。对照存储配置找出这是哪个存储:
sh
pvesm status
lsblk如果多个存储共享同一组物理盘(比如 local 和 local-lvm 都在同一块系统盘上),它们会互相影响。
3. 排除计划任务撞车
备份、scrub、存储复制这类任务本身会占用大量 IO,如果排查时间恰好和它们重叠,看到的"延迟高"可能是正常现象:
sh
zpool status # 看有没有 scrub 正在进行同时查一下最近的备份任务日志(数据中心 → 备份)有没有正在运行的作业。
确认是计划任务导致的 → 属于正常现象,考虑错开时间窗口,而不是当作故障处理。
排除了计划任务 → 继续下一步。
4. 检查存储介质本身的能力
sh
smartctl -a /dev/sdX区分机械盘和 SSD:机械盘的随机 IO 能力天生远低于 SSD,如果多台客户机同时做随机小块写入,机械盘的 await 升高是符合物理规律的,不是"故障"。同时确认盘的健康状态,SSD 需要额外关注剩余寿命/已用寿命相关的属性。
5. 检查客户机的磁盘配置
sh
qm config <vmid>按重要性检查:
| 配置项 | 建议 | 影响 |
|---|---|---|
| 总线类型 | SCSI(配合 VirtIO SCSI single) | 用 IDE 总线开销明显更大,尤其是老旧客户机遗留配置 |
| IO thread | 开启 | 关闭时该磁盘的 IO 处理挤占单一 QEMU 主线程 |
| Cache 模式 | 默认 No cache | writeback 更快但有断电数据风险,不要为了性能盲目改 |
| Discard | 开启 | 精简置备存储上,不开会让已删除空间无法回收,间接影响性能 |
历史遗留的客户机(很久以前创建、一直没重新检查过配置)是这类问题的常见来源。
6. 检查存储池的占用率
存储池接近写满时,写入性能会明显下降,这在 ZFS 上尤其明显(通常超过 80% 占用率后下降更快):
sh
zpool list
lvs -a如果确实接近写满,先参考local-lvm 满了或者存储扩容相关文章处理容量问题,性能问题往往会跟着缓解。
7. 排除单台客户机"吵闹的邻居"
多台客户机共享同一存储时,某一台如果在做大量随机 IO(比如数据库全表扫描、备份软件全量扫描),会拖慢共享这个存储的其他客户机。逐个在客户机内部观察它们各自的 IO 情况,或者依次关闭怀疑对象做排除法。
8. 网络存储的额外检查
如果受影响的存储是 NFS、iSCSI 这类网络后端,IO 延迟的瓶颈可能在网络本身或者存储服务端:
sh
ping -c 10 <存储服务器IP>关注延迟和丢包,同时检查存储服务端自身的负载情况。
9. 检查 RAID 卡/HBA 的缓存策略
如果用了带缓存的硬件 RAID 卡,缓存策略(写直达 vs 写回)、有没有电池/超级电容保护(BBU/supercap)会显著影响持续写入性能。较老或者配置不当的 RAID 卡是常见的隐藏瓶颈,需要进各自厂商的管理工具确认。
确认恢复
iostat -x里各设备的%util和await回落到平时观察到的正常水平。- 受影响客户机内的应用响应恢复正常(打开网页、执行常规操作不再明显卡顿)。
- Web UI 节点 Summary 的 IO delay 图表趋于平稳。
- 如果调整过配置(总线类型、IO thread、Discard),确认改动生效且客户机能正常读写。
仍未解决
带上以下信息求助:
sh
iostat -x 2 10
zpool status # 或 lvs -a
qm config <vmid>外加受影响客户机列表、问题出现的时间规律,以及是否和计划任务(备份、scrub)有关联。想做更系统的基准测试来量化改动前后的差异,可以参考基准测试方法。参考如何有效求助整理完整信息。