Files
sx/tests/stress-http.sh
2026-02-18 15:59:49 +02:00

69 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Stress test for the HTTP server's arena memory management.
# Sends requests in rounds and reports memory stats per round.
set -e
PORT=9876
# Build
echo "building..."
zig build
SRC=examples/32-http-server.sx
cp "$SRC" "$SRC.bak"
sed "s/PORT :: 8080/PORT :: $PORT/" "$SRC.bak" > "$SRC"
./zig-out/bin/sx build examples/32-http-server.sx -o /tmp/sx-http-stress
mv "$SRC.bak" "$SRC"
# Start server
/tmp/sx-http-stress &
SERVER_PID=$!
sleep 0.3
if ! kill -0 $SERVER_PID 2>/dev/null; then
echo "FAIL: server did not start"
exit 1
fi
cleanup() {
kill $SERVER_PID 2>/dev/null || true
wait $SERVER_PID 2>/dev/null || true
rm -f /tmp/sx-http-stress
}
trap cleanup EXIT
initial_rss=$(ps -o rss= -p $SERVER_PID | tr -d ' ')
run_round() {
local count=$1
local failures=0
for i in $(seq 1 $count); do
resp=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT 2>/dev/null) || true
if [ "$resp" != "200" ]; then
failures=$((failures + 1))
fi
done
local rss=$(ps -o rss= -p $SERVER_PID | tr -d ' ')
local delta=$((rss - initial_rss))
printf " %-8s requests → RSS: %s KB (delta: %+d KB, %d failed)\n" "$count" "$rss" "$delta" "$failures"
}
echo ""
echo "initial RSS: ${initial_rss} KB"
echo ""
run_round 2000
run_round 3000
run_round 10000
final_rss=$(ps -o rss= -p $SERVER_PID | tr -d ' ')
total=$((2000 + 3000 + 10000))
echo ""
echo "--- summary ---"
echo "total requests: $total"
echo "initial RSS: ${initial_rss} KB"
echo "final RSS: ${final_rss} KB"
echo "total delta: $((final_rss - initial_rss)) KB"