圧力テストshellスクリプト
1745 ワード
一般的にabで圧力測定を行う場合、1回だけ実行すると結果が正確ではないので、手動で何回か実行します.この操作は面倒で、ここでshellスクリプトを書いて、apacheのabをパッケージして、指定したテスト回数を入力して、自動的に行って、テストが完成した後に平均的なrpsを返して、および最高と最低のrpsを返します.
次のスクリプトはab_dirの値を自分のabのディレクトリに変更します.具体的なパラメータは次のとおりです.
n:abリクエストの回数.
c:同時リクエスト数.
t:abを実行した回数.
url:圧力測定url、urlは最後のパラメータでなければなりません.
使用方法:sh rps.sh -n 20000 -c 1000 -t 10 localhost/lua_io
結果:
avg rps: 12552
min rps: 11780
max rps: 13324
上のコード:
次のスクリプトはab_dirの値を自分のabのディレクトリに変更します.具体的なパラメータは次のとおりです.
n:abリクエストの回数.
c:同時リクエスト数.
t:abを実行した回数.
url:圧力測定url、urlは最後のパラメータでなければなりません.
使用方法:sh rps.sh -n 20000 -c 1000 -t 10 localhost/lua_io
結果:
avg rps: 12552
min rps: 11780
max rps: 13324
上のコード:
#!/bin/sh
total_request=10000
concurrency=100
times=1
cmd_idx=1
param_count=$#
while [ $cmd_idx -lt $param_count ]
do
cmd=$1
shift 1 #remove $1
case $cmd in
-n)
total_request=$1
shift 1;;
-c)
concurrency=$1
shift 1;;
-t)
times=$1
shift 1;;
*)
echo "$cmd, support parameter: -n, -c, -t";;
esac
cmd_idx=`expr $cmd_idx + 2`
done
url=$1
if [ $url = '' ]; then
echo 'the test url must be provided...'
exit 2
fi
echo "Total Request: $total_request, Concurrency: $concurrency, URL: $url, Times: $times"
ab_dir=/home/servers/httpd/httpd-2.2.21/bin
ab_cmd="$ab_dir/ab -n $total_request -c $concurrency $url"
echo $ab_cmd
idx=1
rps_sum=0
max=-1
min=99999999
while [ $idx -le $times ]
do
echo "start loop $idx"
result=`$ab_cmd | grep 'Requests per second:'`
result=`echo $result | awk -F ' ' '{ print $4 }' | awk -F '.' '{ print $1 }'`
rps_sum=`expr $result + $rps_sum`
if [ $result -gt $max ]; then
max=$result
fi
if [ $result -lt $min ]; then
min=$result
fi
idx=`expr $idx + 1`
done
echo "avg rps: "`expr $rps_sum / $times`
echo "min rps: $min"
echo "max rps: $max"