devtools/ab_test.sh
raw ยท 1693 bytes
#!/usr/bin/env bash
set -euo pipefail
# Run from repo root:
# sudo ./test_tinyproxy.sh
#
# Routes:
# :12700 -> builtin http_ok
# :12800 -> TCP proxy to 127.0.0.1:12700
NOFILE="${NOFILE:-1048576}"
WORKERS="${WORKERS:-0}"
TINYPROXY="${TINYPROXY:-/usr/local/bin/tinyproxy}"
LISTEN_BACKLOG="${LISTEN_BACKLOG:-65535}"
SYN_BACKLOG="${SYN_BACKLOG:-65535}"
EPHEMERAL_RANGE="${EPHEMERAL_RANGE:-10000 65535}"
if [ "$(id -u)" -ne 0 ]; then
echo "error: run as root: sudo $0" >&2
exit 1
fi
if [ ! -x "$TINYPROXY" ]; then
echo "error: tinyproxy binary not found/executable: $TINYPROXY" >&2
exit 1
fi
echo "== tinyproxy stress-test launcher =="
echo "tinyproxy: $TINYPROXY"
echo "workers: $WORKERS"
echo "nofile: $NOFILE"
echo "somaxconn: $LISTEN_BACKLOG"
echo "tcp_max_syn_backlog: $SYN_BACKLOG"
echo "ephemeral ports: $EPHEMERAL_RANGE"
echo
echo "== raising process fd limit =="
ulimit -n "$NOFILE"
echo "soft nofile: $(ulimit -Sn)"
echo "hard nofile: $(ulimit -Hn)"
echo
echo "== applying temporary sysctl tuning =="
sysctl -w "net.core.somaxconn=$LISTEN_BACKLOG"
sysctl -w "net.ipv4.tcp_max_syn_backlog=$SYN_BACKLOG"
sysctl -w "net.ipv4.ip_local_port_range=$EPHEMERAL_RANGE"
echo
echo "== current relevant sysctls =="
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.ipv4.ip_local_port_range
echo
echo "== starting tinyproxy =="
echo "test direct builtin:"
echo " ab -c 10000 -n 100000 http://127.0.0.1:12700/"
echo
echo "test chained tcp->tcp->builtin:"
echo " ab -c 10000 -n 100000 http://127.0.0.1:12800/"
echo
exec "$TINYPROXY" \
-w"$WORKERS" \
-L "tcp :12700 builtin http_ok" \
-L "tcp :12800 tcp 127.0.0.1:12700"