proxy.py/benchmark/compare.sh

120 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
#
# proxy.py
# ~~~~~~~~
# ⚡⚡⚡ Fast, Lightweight, Programmable, TLS interception capable
# proxy server for Application debugging, testing and development.
#
# :copyright: (c) 2013-present by Abhinav Singh and contributors.
# :license: BSD, see LICENSE for more details.
#
usage() {
echo "Usage: ./benchmark/compare.sh"
echo "You must run this script from proxy.py repo root."
}
DIRNAME=$(dirname "$0")
if [ "$DIRNAME" != "./benchmark" ]; then
usage
exit 1
fi
BASENAME=$(basename "$0")
if [ "$BASENAME" != "compare.sh" ]; then
usage
exit 1
fi
PWD=$(pwd)
if [ $(basename $PWD) != "proxy.py" ]; then
usage
exit 1
fi
TIMEOUT=1sec
CONCURRENCY=100
DURATION=1m
TOTAL_REQUESTS=100000
OPEN_FILE_LIMIT=65536
BACKLOG=OPEN_FILE_LIMIT
SERVER_HOST=127.0.0.1
AIOHTTP_PORT=8080
TORNADO_PORT=8888
STARLETTE_PORT=8890
PROXYPY_PORT=8899
BLACKSHEEP_PORT=9000
ulimit -n $OPEN_FILE_LIMIT
echo "CONCURRENCY: $CONCURRENCY workers, DURATION: $DURATION, TIMEOUT: $TIMEOUT"
run_benchmark() {
oha \
--no-tui \
--latency-correction \
-z $DURATION \
-c $CONCURRENCY \
-t $TIMEOUT \
http://127.0.0.1:$1/http-route-example
}
benchmark_lib() {
python ./benchmark/_$1.py > /dev/null 2>&1 &
local SERVER_PID=$!
echo "Server (pid:$SERVER_PID) running"
sleep 1
run_benchmark $2
kill -15 $SERVER_PID
sleep 1
kill -0 $SERVER_PID > /dev/null 2>&1
local RUNNING=$?
if [ "$RUNNING" == "1" ]; then
echo "Server gracefully shutdown"
fi
}
benchmark_asgi() {
uvicorn \
--port $1 \
--backlog 65536 \
$2 > /dev/null 2>&1 &
local SERVER_PID=$!
echo "Server (pid:$SERVER_PID) running"
sleep 1
run_benchmark $1
kill -15 $SERVER_PID
sleep 1
kill -0 $SERVER_PID > /dev/null 2>&1
local RUNNING=$?
if [ "$RUNNING" == "1" ]; then
echo "Server gracefully shutdown"
fi
}
# echo "============================="
# echo "Benchmarking Proxy.Py"
# PYTHONPATH=. benchmark_lib proxy $PROXYPY_PORT
# echo "============================="
# echo "============================="
# echo "Benchmarking Blacksheep"
# benchmark_lib blacksheep $BLACKSHEEP_PORT
# echo "============================="
# echo "============================="
# echo "Benchmarking Starlette"
# benchmark_lib starlette $STARLETTE_PORT
# echo "============================="
# echo "============================="
# echo "Benchmarking AIOHTTP"
# benchmark_lib aiohttp $AIOHTTP_PORT
# echo "============================="
# echo "============================="
# echo "Benchmarking Tornado"
# benchmark_lib tornado $TORNADO_PORT
# echo "============================="