Apache Benchmarks mit ab und curl
Oft gibt es in der Webserver-Administration die Notwendigkeit Performance-Messungen eines Webauftritts zu machen. Vor allem nach Updates von Komponenten wie Apache oder PHP besteht die Möglichkeit das ein gut funktionierender Webauftritt plötzlich an Performance verloren hat.
Zwei Tools können hier helfen um Licht in die Sache zu bringen bzw. um nach Konfigurationsänderungen Vergleiche anzustellen um so zu sehen ob Änderungen in die richtige Richtung gehen.
Zum Einen gibt es hier unter Linux das Apache-eigene Tool ab
(Apache-Benchmark) und zum Anderen das Konsolen-Tool curl mit welchem eben an
der Konsole Webzugriffe gestartet und gemessen werden können.
1. ab
ab liefert hier Benchmarks und startet hier bei Bedarf mehrfache Zugriffe um
so statistisch ein objektives Bild zu erhalten. Es kann Zugriffe nacheinander
aber auch parallel absetzen um so die Leistungsfähigkeit eines Webservers
insgesamt zu ermitteln. Die Anzahl der Tests wird dabei mit dem Parameter -n
festgelegt. Ein Auruf von ab -n 5 <url> ruft als Beispiel die besagte Url 5x
auf und liefert ungefähr folgenden Report:
This is ApacheBench, Version 2.3 <$Revision: 1923142 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking <Servername> (be patient).....done
Server Software: Apache
Server Hostname: <Servername>
Server Port: 80
Document Path: /subdir
Document Length: 133099 bytes
Concurrency Level: 1
Time taken for tests: 7.824 seconds
Complete requests: 5
Failed requests: 0
Total transferred: 669680 bytes
HTML transferred: 665495 bytes
Requests per second: 0.64 [#/sec] (mean)
Time per request: 1564.802 [ms] (mean)
Time per request: 1564.802 [ms] (mean, across all concurrent requests)
Transfer rate: 83.59 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1480 1565 64.9 1600 1631
Waiting: 1391 1468 58.1 1507 1515
Total: 1480 1565 64.9 1600 1631
Percentage of the requests served within a certain time (ms)
50% 1591
66% 1608
75% 1608
80% 1631
90% 1631
95% 1631
98% 1631
99% 1631
100% 1631 (longest request)
Für meine Tests entscheidend ist vor allem die Zeile "Time taken for tests" welche die Gesamtdauer der Tests angibt.
Sind die Werte dieses Benchmarks zufriedenstellend so sollte man diese mit
paralellen Tests wiederholen. Im Prinzip wird hier nur einfach der Aufruf um
den Parameter -c erweitert:
ab -n 5 -c 2 <url>
In diesem Falle zwei gleichzeitige Aufrufe.
2. curl
Ein weiteres Tool zum Messen der Performance von Webzugriffen ist das oben
erwähnte Programm curl. Mit dem Parameter -w "%{time_total}\n" wird hier
die Zeit angegeben welche zum Vollständigen Laden der Seite notwendig war. Bei
allen meinen Tests mit curl ist diese Zeitangabe am Aussagekräftigsten.
Es gibt noch weitere Parameter mit welchen Zeitmessungen aller Netzwerkzugriffe gemacht werden können jedoch sind diese in der Regel nur notwendig wenn es Änderungen in der Netzwerk-Infrastruktur gegeben hat und diese gemessen werden müssen.
time_total enthält auch nicht die Zeit welche notwendig ist um die Seite
gesamte zu rendern, auch hier gibt es andere Parameter welche eigentlich nur
für Webentwickler wirklich wichtig sind.
Für alle diese unerwähnten Parameter möchte ich auf das Manual von Curl
hinweisen (man curl)
curl -o /dev/null -sS -w "%{time_total}\n" <url>
3. Fazit
Auch bei gut funktionierenden Webservern bietet es sich an die oben erwähnten Benchmaks zu erstellen und zu dokumentieren. So hat man immer einen Vergleich und im Falle des Falles auch Werte zum Orientieren.