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 "--------------------------------------"
|