大数跨境
0
0

一键压测磁盘 QPS 的脚本(FIO)

一键压测磁盘 QPS 的脚本(FIO) Linux运维技术之路
2025-08-27
4
导读:一键压测磁盘 QPS 的脚本(FIO)📌 脚本内容(fio_qps_test.sh)#!

 










 

一键压测磁盘 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. 1. 保存为脚本
    nano fio_qps_test.sh

    粘贴上面的内容,保存退出。

  2. 2. 给执行权限
    chmod +x fio_qps_test.sh
  3. 3. 运行
    ./fio_qps_test.sh
  4. 4. 结果示例
    ================= 压测结果 =================
    测试场景       | 模式          | IOPS(QPS)  | 带宽
    -------------------------------------------------------------
    randread       | randread      | 1520       | 6.2MB/s
    randwrite      | randwrite     | 980        | 3.9MB/s
    randrw         | randrw        | 1100       | 4.5MB/s
    =============================================

 




 

 


往期回顾


【声明】内容源于网络
0
0
Linux运维技术之路
专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
内容 347
粉丝 0
Linux运维技术之路 专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
总阅读694
粉丝0
内容347