123 lines
3 KiB
Bash
123 lines
3 KiB
Bash
|
#!/bin/bash
|
||
|
usage()
|
||
|
{
|
||
|
echo 'runAb.sh - Run Apache Benchmark to test access log'
|
||
|
echo ' Usage: runAb.sh [--conn nnn] [--log xxx] [--num nnn] [--time nnn] [--wait nn]'
|
||
|
echo ' -c|--conn - number of simultaneous connections (default 100)'
|
||
|
echo ' -l|--log - name of logfile (default benchmark.log)'
|
||
|
echo ' -n|--num - number of requests (default 50000); ignored when -t specified'
|
||
|
echo ' -t|--time - time in seconds for benchmark (default no limit)'
|
||
|
echo ' -w|--wait - number of seconds to wait for Traefik to initialize (default 15)'
|
||
|
echo ' '
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
# Parse options
|
||
|
|
||
|
conn=100
|
||
|
num=50000
|
||
|
wait=15
|
||
|
time=0
|
||
|
logfile=""
|
||
|
while [[ $1 =~ ^- ]]
|
||
|
do
|
||
|
case $1 in
|
||
|
-c|--conn)
|
||
|
conn=$2
|
||
|
shift
|
||
|
;;
|
||
|
-h|--help)
|
||
|
usage
|
||
|
;;
|
||
|
-l|--log|--logfile)
|
||
|
logfile=$2
|
||
|
shift
|
||
|
;;
|
||
|
-n|--num)
|
||
|
num=$2
|
||
|
shift
|
||
|
;;
|
||
|
-t|--time)
|
||
|
time=$2
|
||
|
shift
|
||
|
;;
|
||
|
-w|--wait)
|
||
|
wait=$2
|
||
|
shift
|
||
|
;;
|
||
|
*)
|
||
|
echo Unknown option "$1"
|
||
|
usage
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
if [ -z "$logfile" ] ; then
|
||
|
logfile="benchmark.log"
|
||
|
fi
|
||
|
|
||
|
# Change to accessLog examples directory
|
||
|
|
||
|
[ -d examples/accessLog ] && cd examples/accessLog
|
||
|
if [ ! -r exampleHandler.go ] ; then
|
||
|
echo Please run this script either from the traefik repo root or from the examples/accessLog directory
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
# Kill traefik and any running example processes
|
||
|
|
||
|
sudo pkill -f traefik
|
||
|
pkill -f exampleHandler
|
||
|
[ ! -d log ] && mkdir log
|
||
|
|
||
|
# Start new example processes
|
||
|
|
||
|
go build exampleHandler.go
|
||
|
[ $? -ne 0 ] && exit $?
|
||
|
./exampleHandler -n Handler1 -p 8081 &
|
||
|
[ $? -ne 0 ] && exit $?
|
||
|
./exampleHandler -n Handler2 -p 8082 &
|
||
|
[ $? -ne 0 ] && exit $?
|
||
|
./exampleHandler -n Handler3 -p 8083 &
|
||
|
[ $? -ne 0 ] && exit $?
|
||
|
|
||
|
# Wait a couple of seconds for handlers to initialize and start Traefik
|
||
|
|
||
|
cd ../..
|
||
|
sleep 2s
|
||
|
echo Starting Traefik...
|
||
|
sudo ./traefik -c examples/accessLog/traefik.ab.toml &
|
||
|
[ $? -ne 0 ] && exit $?
|
||
|
|
||
|
# Wait for Traefik to initialize and run ab
|
||
|
|
||
|
echo Waiting $wait seconds before starting ab benchmark
|
||
|
sleep ${wait}s
|
||
|
echo
|
||
|
stime=`date '+%s'`
|
||
|
if [ $time -eq 0 ] ; then
|
||
|
echo Benchmark starting `date` with $conn connections until $num requests processed | tee $logfile
|
||
|
echo | tee -a $logfile
|
||
|
echo ab -k -c $conn -n $num http://127.0.0.1/test | tee -a $logfile
|
||
|
echo | tee -a $logfile
|
||
|
ab -k -c $conn -n $num http://127.0.0.1/test 2>&1 | tee -a $logfile
|
||
|
else
|
||
|
if [ $num -ne 50000 ] ; then
|
||
|
echo Request count ignored when --time specified
|
||
|
fi
|
||
|
echo Benchmark starting `date` with $conn connections for $time seconds | tee $logfile
|
||
|
echo | tee -a $logfile
|
||
|
echo ab -k -c $conn -t $time -n 100000000 http://127.0.0.1/test | tee -a $logfile
|
||
|
echo | tee -a $logfile
|
||
|
ab -k -c $conn -t $time -n 100000000 http://127.0.0.1/test 2>&1 | tee -a $logfile
|
||
|
fi
|
||
|
|
||
|
etime=`date '+%s'`
|
||
|
let "dt=$etime - $stime"
|
||
|
let "ds=$dt % 60"
|
||
|
let "dm=($dt / 60) % 60"
|
||
|
let "dh=$dt / 3600"
|
||
|
echo | tee -a $logfile
|
||
|
printf "Benchmark ended `date` after %d:%02d:%02d\n" $dh $dm $ds | tee -a $logfile
|
||
|
echo Results available in $logfile
|
||
|
|