56 lines
1.2 KiB
Bash
Executable File
56 lines
1.2 KiB
Bash
Executable File
#!/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 "--------------------------------------"
|