Deutsch | English

Apache Benchmarks mit ab und curl

Apache Benchmarks mit ab und curl

2026-01-09 - Andreas Wittmann - Tags: publish,apache

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.