Wenn die eigene Webseite oder Webserver vermeintlich lange Reaktionszeiten aufweist, kann man dies mittels dem Benchmark Tool ApacheBench verifiziert werden.
ApacheBench (AB) ist ein unter Linux im Apache Essentials Paket vorhandenes Tool, welches simultane Zugriffe und Interaktionen auf einem Webserver simulieren kann.
Benötigte Pakete für den Benchmarktest:
Bei einem grundinstallierten Debian Rechner müssen zusätzlich die Apache Utilities für den Benchmark Test installiert werden.
apt-get install apache2-utils gnuplot
Für eine zusätzliche grafische Auswertung verwende ich das Tool gnuplot.
Benchmarktest mit AB
Für einen ersten Überblick bezüglich der möglichen Performance kann man folgenden Befehl ausführen:
ab -c 5 -n 100 http://raspberry.outback/
Folgende Parameter sind ausschlaggebend:
- -c: Anzahl der gleichzeitigen Clients, welche auf den Webserver zugreifen sollen
- -n: Anzahl der Interaktionen, welches jeder Client durchführen soll.
Wichtig bei der URL ist, dass am Ende ein / steht.
This is ApacheBench, Version 2.3 <$Revision: 1706008
< Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking raspberry.outback/ (be patient).....done Server Software: Apache Server Hostname: raspberry.outback/ Server Port: 80 Document Path: / Document Length: 234 bytes Concurrency Level: 5 Time taken for tests: 10.873 seconds Complete requests: 100 Failed requests: 0 Non-2xx responses: 100 Total transferred: 51000 bytes HTML transferred: 23400 bytes Requests per second: 9.20 [#/sec] (mean) Time per request: 543.652 [ms] (mean) Time per request: 108.730 [ms] (mean, across all concurrent requests) Transfer rate: 4.58 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 27 28 0.4 28 30 Processing: 30 509 121.7 540 557 Waiting: 30 509 121.7 540 557 Total: 57 537 121.8 568 584 Percentage of the requests served within a certain time (ms) 50% 568 66% 568 75% 568 80% 568 90% 570 95% 581 98% 584 99% 584 100% 584 (longest request)
In dem Beispiel sieht man, dass die Durchschnittliche Antwortzeit des Webservers bei 108,73 ms liegt. Zudem hat der Client im Durschnitt knapp 540 ms liegt.
Kurzes Bash Skript zum Benchmarktest
Damit ich eine überblick zur Performance mit verschiedene Anzahl von gleichzeitigen Anwendern bekomme, habe ich folgendes kure Skript erstellt.
#!/bin/bash
now=$(date +"%m_%d_%Y_%H_%M_%S")
echo "set terminal png" > template_plot
echo "set output 'benchmark_$now.png'" >> template_plot
echo "set title 'Benchmark Apache Test - $(date +"%m.%d.%Y %H:%M:%S") - $2'" >> template_plot
echo "set size 1,0.7">> template_plot
echo "set grid y">> template_plot
echo "set xlabel 'request'">> template_plot
echo "set ylabel 'response time (ms)'" >> template_plot
i="1"
while [ $i -le $1 ]
do
ab -c $i -n 100 -g data_$i.tsv $2
if [ $i -eq 1 ]; then
echo -ne "plot 'data_$i.tsv' using 9 smooth sbezier with lines title 'Concurrent User: $i'" >> template_plot
else
echo ',\' >> template_plot
echo -ne "'data_$i.tsv' using 9 smooth sbezier with lines title 'Concurrent User: $i'" >> template_plot
fi
((i=i+1))
done
gnuplot template_plot
rm data_*.tsv
rm template_plot
Als Ergebnis kann man anhand dieser beiden Graphen Probleme bei der Performance des Webservers aufzeigen:
Alternative Wege für Benchmarktests
Natürlich kann man mit anderen Linux Befehlen wie curl oder wget unter Linux den Webserver auf Performance prüfen.