Linux磁盘IO压测需匹配真实业务特征,fio是主力工具:OLTP用4K随机读写、日志用128K顺序写、备份用1M顺序读写;stress仅适合轻量级写验证;压测时必须同步用iostat、vmstat等监控瓶颈。

Linux磁盘IO压测不能只看“能不能写满”,关键是要匹配真实业务的行为特征——比如数据库的随机小块读写、日志服务的顺序追加写、备份任务的大文件吞吐。用错工具或参数,测出来的只是硬盘标称值,不是系统在业务压力下的真实响应能力。
区分两类核心压测目标
真实场景中,磁盘压力往往来自两种典型模式,测试前必须先明确:
- 延迟敏感型:如MySQL/PostgreSQL事务提交、Redis AOF刷盘。这类业务对单次I/O响应时间(r_await/w_await)极其敏感,哪怕平均吞吐不低,但p95延迟突增几十毫秒,就可能引发应用超时或连接池耗尽。
- 吞吐密集型:如视频转码临时文件写入、ETL数据落地、归档日志压缩。关注点是持续稳定的MB/s或IOPS,同时要观察队列深度(avgqu-sz)是否长期大于1,这反映底层设备是否已成瓶颈。
用fio模拟真实IO行为(推荐主力工具)
fio能精准控制块大小、读写模式、队列深度和缓存策略,比stress更贴近生产环境。常见业务映射示例如下:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
OLTP数据库负载:4KB随机读写,混合比例70%读+30%写,启用direct=1绕过page cache
fio -name=db-oltp -ioengine=libaio -direct=1 -bs=4k -rw=randrw -rwmixread=70 -iodepth=32 -size=10G -runtime=300 -group_reporting -
日志类顺序写:128KB大块顺序写,禁用buffer,模拟rsyslog或filebeat输出
fio -name=log-write -ioengine=sync -direct=1 -bs=128k -rw=write -iodepth=1 -size=5G -runtime=120 -
备份/归档场景:1MB顺序读+写,高吞吐压力下观察系统整体稳定性
fio -name=backup -ioengine=posixaio -direct=1 -bs=1m -rw=readwrite -iodepth=4 -size=20G -runtime=180
stress做快速磁盘写压测(轻量级验证)
stress适合快速验证磁盘基础写能力或触发空间告警,但无法模拟复杂IO模型。注意两个关键点:
- 使用-d(hdd)参数启动写进程,配合--hdd-bytes控制单次写入量,默认1GB,建议设为实际业务单次写入上限的2–3倍;
- 它通过mkstemp()生成临时文件再unlink(),不会真正占满空间,如需持续占用磁盘,请改用dd或fio并保留测试文件。
- 示例:启动2个写进程,每轮写500MB,持续90秒
stress --hdd 2 --hdd-bytes 500M --timeout 90
监控必须同步进行,不能只看fio输出
压测时务必并行运行监控命令,否则无法定位瓶颈根源:
- 用iostat -dxm 1观察%util(是否持续>90%)、avgqu-sz(是否堆积)、r_await/w_await(是否跳变);
- 用vmstat 1检查bi/bo(块输入/输出速率)与wa(I/O等待CPU占比),若wa长期>30%,说明CPU在空等磁盘;
- 对NVMe或多路径设备,补充cat /proc/diskstats查看重试、错误计数,避免误判性能问题为硬件故障。

















