
Linux磁盘性能测试核心是看真实I/O能力,不是缓存表现。关键要绕过page cache、强制落盘,并区分顺序和随机场景。
用dd测基础顺序读写
适合快速摸底,但只能反映连续大块读写能力:
- 测写入:运行 dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct ——
oflag=direct跳过缓存,结果里的MB/s是磁盘真实写速 - 测读取:先清缓存 echo 3 > /proc/sys/vm/drop_caches(需root),再运行 dd if=testfile of=/dev/null bs=1G count=1 iflag=direct
- 更严谨的写入测试可加
conv=fdatasync或oflag=dsync,确保数据真正刷到盘上,避免因缓存延迟导致虚高
用fio测真实业务负载
dd只能测顺序,而数据库、日志等多是小块随机IO,fio才能模拟:
- 安装:Ubuntu/Debian用 sudo apt install fio,CentOS/RHEL用 sudo yum install fio
- 随机读(如MySQL查询):fio --name=randread --ioengine=libaio --direct=1 --bs=4k --size=1G --rw=randread --runtime=60 --time_based --group_reporting
- 随机写(如事务日志):fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --size=1G --rw=randwrite --runtime=60 --time_based --group_reporting
- 输出中重点关注
IOPS(每秒操作数)和lat (avg)(平均延迟),它们比吞吐量更能反映响应敏感型应用的表现
用iostat看实时磁盘压力
不是基准测试工具,但能帮你判断当前是不是真瓶颈:
- 运行 iostat -mx 1,关注三列:
%util(利用率超80%说明忙满)、await(平均等待毫秒,持续>10ms需警惕)、svctm(服务时间,接近await才健康) - 配合 iotop 可定位是哪个进程在大量读写,避免误判为硬件问题
- 注意:单次iostat只看瞬时值,建议持续观察1–5分钟,结合业务高峰期对比
SSD额外可用hdparm验证
对NVMe或SATA SSD,hdparm 能快速查看接口级读取能力:
- 安装后执行 hdparm -tT /dev/nvme0n1,其中
-T测缓存读(快但不真实),-t测物理读(更贴近磁盘实际带宽) - 该命令不写盘、无风险,适合巡检;但不能替代fio对4K随机性能的评估











