一键压测磁盘 QPS 的脚本(FIO)
📌 脚本内容(fio_qps_test.sh)
#!/bin/bash
# FIO QPS 压测脚本
# 作者:Demo
TEST_FILE="/data/fio_testfile" # 测试文件路径 (不要放在数据库数据目录!!!)
SIZE="1G" # 测试文件大小
BS="4k" # 块大小
RUNTIME="30" # 每个测试持续时间(秒)
IODEPTH="64" # 队列深度
# 检查是否安装 fio
if ! command -v fio &>/dev/null; then
echo"未检测到 fio,请先安装: yum install -y fio 或 apt install -y fio"
exit 1
fi
echo"============================================="
echo" FIO 磁盘 QPS 压测开始 "
echo" 文件: $TEST_FILE, 大小: $SIZE, 块大小: $BS, 时长: ${RUNTIME}s, 队列深度: $IODEPTH"
echo"============================================="
# 结果保存变量
RESULTS=()
run_test() {
NAME=$1
RW=$2
MIX=$3
if [ "$MIX" != "" ]; then
MIX_OPT="--rwmixread=$MIX"
else
MIX_OPT=""
fi
echo"测试: $NAME ..."
OUT=$(fio --name=$NAME --filename=$TEST_FILE --size=$SIZE --bs=$BS --rw=$RW$MIX_OPT \
--ioengine=libaio --iodepth=$IODEPTH --runtime=$RUNTIME --direct=1 --group_reporting 2>/dev/null)
IOPS=$(echo"$OUT" | grep -E 'iops=' | head -n1 | sed -E 's/.*iops=([0-9\.kK]+).*/\1/')
BW=$(echo"$OUT" | grep -E 'bw=' | head -n1 | sed -E 's/.*bw=([0-9\.A-Za-z\/]+).*/\1/')
RESULTS+=("$NAME | $RW | $IOPS | $BW")
}
# 随机读
run_test "randread""randread"""
# 随机写
run_test "randwrite""randwrite"""
# 混合读写 (70%读 30%写)
run_test "randrw""randrw""70"
echo
echo"================= 压测结果 ================="
printf"%-12s | %-12s | %-10s | %-10s\n""测试场景""模式""IOPS(QPS)""带宽"
echo"-------------------------------------------------------------"
for R in"${RESULTS[@]}"; do
echo"$R"
done
echo"============================================="
echo "注意: 压测可能影响线上服务,请勿在生产库数据盘直接运行!"
📌 使用方法
-
1. 保存为脚本 nano fio_qps_test.sh粘贴上面的内容,保存退出。
-
2. 给执行权限 chmod +x fio_qps_test.sh -
3. 运行 ./fio_qps_test.sh -
4. 结果示例 ================= 压测结果 =================
测试场景 | 模式 | IOPS(QPS) | 带宽
-------------------------------------------------------------
randread | randread | 1520 | 6.2MB/s
randwrite | randwrite | 980 | 3.9MB/s
randrw | randrw | 1100 | 4.5MB/s
=============================================

