首页 游戏 软件 排行 专题

VPS 4K随机写压测高延迟,IOPS为何虚高

来源: 本站整理 日期:2026/11/11 22:12:14

部署PostgreSQL或MySQL时,VPS配置看起来很充足,业务却常在并发写入时出现接口抖动。磁盘标称的“高速SSD”没有给出4K随机写延迟,也无法说明突发流量下请求是否堆积。此时若只看一次fio结果,容易把高IOPS误判成低延迟,甚至把页缓存中的成功当成云盘已经落盘。

如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:softshellweb(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。

真正有用的磁盘测试必须可复现:测试参数、文件大小、队列深度和持续时间都要固定,还要同时记录吞吐、延迟及其波动。目的不是给磁盘跑出一个漂亮数字,而是判断瓶颈位于存储介质、云盘控制层,还是业务自身的同步等待。

第一节:用三组负载拆开吞吐与延迟

第一组测试顺序读写,用于观察连续传输带宽。应采用较大的块大小、direct=1绕过页缓存,并让测试持续数十秒,避免文件尚未写完就提前结束。顺序IOPS数值很高,只能说明设备处理连续请求很快,不能证明小随机写同样高效。

VPS 4K随机写压测高延迟,IOPS为何虚高

第二组使用4K随机读写,并分别测试队列深度1和32等水平。QD=1接近单个请求等待时间,QD=32则更接近数据库高并发状态。测试时不要只记录IOPS,还要查看平均延迟及p95、p99分位数;吞吐量上升却伴随延迟同步扩大,通常意味着队列已经进入拥塞区间。

第三组针对业务写入模式设置混合读写比例,并保持总数据量超过可用内存。随机写测试可能受文件布局、后台回收和宿主机缓存影响,因此应至少重复三轮,取稳定区间而不是最高值。若顺序速度正常、4K随机写明显偏慢,瓶颈通常在随机访问路径,而非带宽上限。

第二节:从波动与落盘结果判断真实瓶颈

判断延迟时,要把平均值和尾部延迟放在一起。QD从1增加到32后,IOPS若几乎没有增长,而平均及高分位延迟成倍上升,说明云盘吞吐已接近上限;延迟本身忽高忽低,则可能存在节点迁移、邻居负载或共享存储争用。测试报告中的“峰值”通常持续不了多久。

VPS 4K随机写压测高延迟,IOPS为何虚高

还要识别底层协议。借助系统日志、块设备信息及NVMe协议识别结果,可以确认系统看到的是NVMe设备,还是由虚拟化层映射出的SCSI设备。这不是性能结论,但能帮助定位延迟来自访存路径、云盘网关还是宿主机共享资源,避免仅凭商品名称推断性能。

fsync持久化必须单独验证。可使用fio的fsync模式,或编写固定大小文件的写入程序,每次写入后等待fsync返回,再记录吞吐和完成时间。需要注意的是,fsync返回表示存储栈接受了持久化请求,并不等同于已经完成所有物理介质动作;持续同步写远慢于内存写才是正常现象。

可用ServLlama辅助保存测试配置、节点信息和多轮结果,再用IOPS基准测试、随机写延迟、队列深度影响、fsync持久化四项指标交叉判断。最终应报告测试命令、持续时间、文件大小、并发度及延迟分位数,而不是只给出笼统的“高性能”或“低延迟”结论。

从 IOPS、队列深度和延迟判断磁盘状态

顺序读写只能说明带宽上限,不能代表数据库、虚拟机等小块 I/O 的实际表现。应重点测试 4KiB 随机写,观察 IOPS、平均延迟以及 p95/p99 延迟。IOPS 是单位时间完成的 I/O 数量;延迟过高时,即使 IOPS 漂亮,实际请求仍可能持续堆积。

测试时应使用 fio,通过 direct=1 绕过页缓存,并固定 bs=4K。可从 fio --name=randwrite --filename=/mnt/test/fio.bin --rw=randwrite --bs=4K --direct=1 --iodepth=1 --size=1G --runtime=60 --time_based 起步,再分别把队列深度调整为 1、4、16、64。QD 为 1 更接近单请求响应时间;提高 QD 可压满设备并增加吞吐,但超过拐点后,平均延迟通常会明显上升。总并发约为 numjobs×iodepth,因此不能只报告单队列结果。各档测试应保持文件大小、运行时长和并发数一致,并重复数轮。

VPS 4K随机写压测高延迟,IOPS为何虚高

区分缓存、持久化与 NVMe 协议识别

fsync 持久化必须单独验证。普通写入可能只进入页缓存,异常掉电后存在丢失风险;数据库场景应增加 fsync=1 或 fdatasync=1,同时记录吞吐和延迟。fsync 会引入额外等待,QD 很高也不代表每次提交都已真正落盘。

NVMe 协议识别不能只看商品名称或 lsblk 输出。可用 nvme id-ctrl 查看型号、序列号和固件信息,用 nvme show-topology 或 lspci -vv 检查 PCIe 链路,并读取 /sys/block/nvmeXn1/queue/rotational。但虚拟化 VPS 常只暴露 virtio-scsi,宿主机底层可能是 SATA、RAID 或 NVMe,此时仅凭客户机命令无法确认真实介质。

常见误区包括:拿 dd 的顺序速度当 IOPS、未绕过缓存导致结果失真、测试文件过小而命中内存、在生产盘上压测、忽略共享宿主机的性能抖动,以及把单次最好成绩当作稳定能力。应预留独立测试空间,保存 fio 的 JSON 结果,并比较多次运行的中位数与尾延迟。

可执行检查清单:①确认 CPU、内存、文件系统、可用空间及资源是否共享;②在业务空闲时段依次测试 QD 1/4/16/64,每档至少运行 60 秒并重复三次;③记录 IOPS、带宽、平均及 p95/p99 延迟,找出吞吐拐点;④分别执行普通写与 fsync 持久化写;⑤结合 lsblk、nvme id-ctrl、nvme show-topology 和 smartctl 交叉确认协议、链路及健康状态;⑥按业务并发验证结果,不迷信厂商标称值。

玩家留言 跟帖评论
查看更多评论
相关文章
猜你喜欢
同类下载