
Linux 磁盘读写性能测试,核心是区分场景(顺序/随机、读/写、块大小、队列深度)并选用合适工具,避免用错参数导致结果失真。
用 dd 快速验证顺序吞吐量
适合粗略判断磁盘持续读写能力,但要注意绕过缓存、使用恰当的块大小和次数:
- 写测试(清空页缓存后执行):sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'; dd if=/dev/zero of=/mnt/testfile bs=1M count=2048 oflag=direct
- 读测试(同样需清缓存):sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'; dd if=/mnt/testfile of=/dev/null bs=1M iflag=direct
- 关键点:必须加 oflag=direct 或 iflag=direct 绕过文件系统缓存;bs=1M 比默认 512B 更贴近真实大文件场景;多次运行取稳定值
用 fio 做精细化 I/O 模拟
fio 是最灵活可靠的工具,可精确控制访问模式、并发、深度等,推荐用于生产环境评估:
- 顺序写(2GB,1MB块,直接IO):fio --name=seqwrite --ioengine=libaio --rw=write --bs=1M --size=2G --direct=1 --device=/mnt/testdisk
- 4K 随机读(16线程,队列深度32):fio --name=randread --ioengine=libaio --rw=randread --bs=4k --size=1G --numjobs=16 --iodepth=32 --direct=1 --group_reporting
- 注意:测试前确保目标设备无其他 I/O 干扰;使用 --group_reporting 合并多线程结果;关注 IOPS(随机)和 MB/s(顺序)两个指标
用 iostat 实时观察实际负载表现
不用于主动压测,但在业务运行中诊断瓶颈非常有效:
- 每2秒刷新一次磁盘统计:iostat -x 2
- 重点关注字段:%util(接近100%说明设备饱和)、await(平均I/O等待毫秒数,持续 >10ms 需警惕)、r/s 和 w/s(实际IOPS)、rkB/s 和 wkB/s(吞吐量)
- 配合 iotop 可定位具体进程的磁盘消耗
补充建议:避免常见误区
- 别在根分区或系统盘上跑长时间大压力测试,可能影响系统响应甚至触发OOM
- SSD 测试要预留足够空闲空间(建议 ≥20%),否则垃圾回收会影响随机写性能
- 虚拟机中测试需确认存储后端类型(本地盘?NFS?Ceph?),宿主机层面也可能成为瓶颈
- 单次测试时间建议 ≥60 秒,避开预热/抖动阶段,取稳定区间数据更可信











