壓力測試shell指令碼
阿新 • • 發佈:2019-01-07
一般情況下,用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 上程式碼:
下面的指令碼需要把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"