1. 程式人生 > >壓力測試shell指令碼

壓力測試shell指令碼

        一般情況下,用ab進行壓測時,只執行一次的話,結果不是很準,所以我們就要手動的執行幾次。這個操作很麻煩,這裡寫了個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         上程式碼:
#!/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"