並行壓力測試shell指令碼
阿新 • • 發佈:2018-12-20
記:本文自網上篇章改寫而成。主要目的是為了理解壓測工具執行的原理。
指令碼主要實現的功能有以下幾點。
- 允許不同的併發度和sql執行次數
- rand()實現隨機數選取
- 重新執行會刪除或清空之前產生的檔案
#!/bin/bash
#**********************************#
#併發後臺執行fun #
#for wanggy 2012-01-25 #
#note: www.jquerycn.cn #
#fun_num fun函式後臺執行次數 #
#sql_num 每個函式sql執行次數 #
#**********************************#
#刪除和清空產生的檔案
find ./ -name "fun*.log"|xargs rm -rf {} \
echo > call.log
#資料庫變數設定
dbhost=127.0.0.1
dbbase=sakila
dbuser=dbmon
dbpass=123456
port=3307
#採用date實現隨機數選取
function rand(){
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
}
#定義函式
fun()
{
#函式併發次數
fun_num=1
#函式內sql執行次數
sql_num=50000
for ((j=1;j<=$fun_num;j++));do
{
random_num=`echo $RANDOM`
echo "第$j個函式"
for ((i=1;i<=$sql_num;i++));do
mysql -h$dbhost -u$dbuser -p$dbpass -D$dbbase -P$port <<GETRECODE >> fun_$j.log
select concat(first_name,last_name) as name from actor where actor_id = $(rand 1 50);
GETRECODE
echo "第$j個函式 第$i次"
echo "第$j個函式 第$i次" >>call.log
done
echo "第$j個函式執行完成......"
}&
done
wait
}
main()
{
fun
}
main
exit 0