文档首页> 上云指南> 磁盘 IO 实测方法

磁盘 IO 实测方法

发布时间:2025-11-12 10:38        更新时间:2025-11-13 09:22
磁盘 IO 性能不能只看商品页标称值,自己动手测一遍才有底。用 fio 这个标准测试工具,十几分钟就能拿到可靠数据。 一、准备条件 先装工具:CentOS 执行 yum install -y fio,Ubuntu 执行 apt install -y fio。确认要测的磁盘挂载点和剩余空间,测试文件会占掉你指定的大小,预留至少 2G。测试前先用 uptime 看一眼负载,load average 本来就高的时段测出的数字没有参考意义。避开承载重要业务的繁忙时段,压测会拖慢同盘上的其他读写。 二、测随机读写 数据库类应用主要吃随机 IO,用这条命令: fio --name=randread --filename=/tmp/fio.test --size=1G --rw=randread --bs=4k --iodepth=32 --ioengine=libaio --direct=1 --runtime=60 --time_based 把 --rw 换成 randwrite 就测随机写。几个参数的含义:--bs=4k 是每次读写的块大小,--iodepth=32 是队列深度,--direct=1 绕过系统缓存直写磁盘,--runtime=60 表示持续测 60 秒。结果重点看 IOPS 一栏。对云盘来说,4k 随机读写最能反映真实水平,标称吞吐再高,随机写跟不上,数据库照样慢。 三、测顺序读写 大文件场景看重顺序吞吐,把参数改成 --rw=read --bs=1M 就是顺序读,--rw=write --bs=1M 是顺序写。这类测试主要看 bw(带宽,MB/s)指标。顺序和随机的差距通常很大,普通云盘顺序写几百 MB/s,随机写可能只有几千 IOPS,这是正常现象,不用怀疑自己的测试方法。随机和顺序各测一轮,两组数字合起来才是一块盘的完整画像。 四、验证与常见报错 每组参数建议跑三次,取第二次和第三次的稳定值,第一次往往有缓存干扰。两次结果如果相差超过三成,把 iodepth 从 32 降到 8 再测一轮,有的云盘对高队列深度反而敏感。测完删除测试文件:rm -f /tmp/fio.test。数据盘和系统盘性能可能差异明显,两块盘分别测,别用系统盘的数字去推数据盘的表现。 常见报错两条:提示 libaio 引擎不可用,先装 libaio-devel 再重试,或把 ioengine 改成 psync;提示权限不足,检查当前用户对目标目录是否有写权限,别直接拿系统根目录当测试路径。测出来的数字如果长期只有标称值的一半不到,带着记录找服务商核对。