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:

Apache Benchmark mit fehlerhafter Performance

Apache Benchmark mit fehlerhafter Performance

Apache Benchmark mit gewohnten Ergebnissen

Apache Benchmark mit gewohnten Ergebnissen

 

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.