#!/bin/bash # DNS压力测试脚本 SERVER="127.0.0.1" DOMAIN="example.com" THREADS=20 QUERIES=1000 # 创建临时文件存储进程ID pids=() echo "开始DNS压力测试..." echo "服务器: $SERVER" echo "域名: $DOMAIN" echo "线程数: $THREADS" echo "总查询数: $QUERIES" echo "--------------------------------------" # 记录开始时间(秒) start_time=$SECONDS # 运行并发查询 for ((i=1; i<=THREADS; i++)); do for ((j=1; j<=$((QUERIES/THREADS)); j++)); do dig @$SERVER $DOMAIN A +short > /dev/null & pids+=($!) done # 每启动5个线程暂停一下,避免系统资源瞬间耗尽 if (( $i % 5 == 0 )); then echo "线程 $i 已启动,已完成 $i/$THREADS 个线程..." sleep 0.5 fi done echo "所有 $THREADS 个线程已启动,共执行 $QUERIES 个查询,等待完成..." # 等待所有查询完成 for pid in "${pids[@]}"; do wait $pid done # 计算执行时间 elapsed=$((SECONDS - start_time)) # 计算QPS(每秒查询数) if [ $elapsed -eq 0 ]; then elapsed=1 # 避免除以零 fi qps=$((QUERIES / elapsed)) echo "--------------------------------------" echo "所有查询已完成!" echo "执行时间: $elapsed 秒" echo "QPS: $qps 次/秒" echo "--------------------------------------"