Website-Geschwindigkeit testen mit Apache Bench

Update: Freitag, 27. September

Home / TECHNIK / Programmierung

Die Geschwindigkeit einer Website ist sehr wichtig, damit auch Besucher mit einer langsamen Internet-Verbindung die Seiten möglichst zügig ohne lange Wartezeit betrachten können. Doch auch die server-seitige Verarbeitung kann längere Zeit dauern, wenn z.B. umfangreiche Datenbankanfragen oder komplexe PHP-Scripte verarbeitet werden müssen. Das hat dann Auswirkungen auf alle Besucher und der Zugriff verzögert sich auch bei Besuchern mit einer sehr schnellen Internet-Verbindung. 
Um die Performance der eigenen Webseite besser abschätzen zu können, ist ein Benchmark, also eine Messung der Zugriffszeiten extrem hilfreich. Ein besonderer Tipp ist hier das kostenlose Tool "Apache HTTP server benchmarking tool" (Apache Bench) für Windows. 

 

Beispiel: Starten von Apache Bench (AB) unter Windows

Schritt 1 - Download Apache Bench, z.B. von https://www.apachelounge.com/download/
Schritt 2 - Installieren von Xampp.
Schritt 3 - Öffnen einen Kommandozeile (CMD). Zum Beispiel per Tastatur: [Win + X] und [I].
Schritt 4 - Wechseln in das Verzeichnis von Apache Bench (AB): cd C:\httpd-2.4.37-win64-VC15\Apache24\bin
Schritt 5 - Apache Bench starten: ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" https://www.andinet.de/index.html
Schritt 6 - Ausführung abwarten und Ergebnis analysieren.

 

Beispiel Ausgabe von Andinet

Das folgende Beispiel zeigt die Ausgabe von ApacheBench für eine Seite von Andinet (Alle Kinder Witze):

C:\httpd-2.4.37-win64-VC15\Apache24\bin>ab -n 1000 -k http://www.andinet.de/lustiges/witze/alle_kinder_witze.html
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.andinet.de (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache
Server Hostname: www.andinet.de
Server Port: 80

Document Path: /lustiges/witze/alle_kinder_witze.html
Document Length: 58149 bytes

Concurrency Level: 1
Time taken for tests: 77.564 seconds
Complete requests: 1000
Failed requests: 0
Keep-Alive requests: 990
Total transferred: 58412710 bytes
HTML transferred: 58149000 bytes
Requests per second: 12.89 [#/sec] (mean)
Time per request: 77.564 [ms] (mean)
Time per request: 77.564 [ms] (mean, across all concurrent requests)
Transfer rate: 735.44 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.4 0 16
Processing: 2 77 35.2 94 374
Waiting: 0 73 33.9 90 119
Total: 2 78 35.1 94 374

Percentage of the requests served within a certain time (ms)
50% 94
66% 95
75% 102
80% 106
90% 109
95% 109
98% 113
99% 115
100% 374 (longest request)

Hinweis für SSL Websites

Das klassische ApacheBench tool unterstützt keine SSL Seiten (https):

C:\httpd-2.4.37-win64-VC15\Apache24\bin>ab -n 1000 -k https://www.andinet.de/lustiges/witze/alle_kinder_witze.php
SSL not compiled in; no https support

Allerdings gibt es eine Variante speziell für SSL, statt dem Befehl ab kann einfach abs verwendet werden, z. B.:

abs -n 1000 -k https://www.andinet.de/lustiges/witze/alle_kinder_witze.php

 

Benchmark der Andinet Seite

Für Andinet habe ich verschiedene Varianten der Website miteinander vergleichen, um die Performance-Unterschiede zu analysieren und das Framework zu optimieren.

Variante 1:

Jede einzelne Website wird bei Anfrage dynamisch generiert. Dafür wird ein PHP-Script benutzt, das Inhalt aus einer MySQL Datenbank liest und HTML-Code für die Seite erzeugt, der an den Browser des Besuchers geschickt wird. Diese Variante ist für die Website-Gestaltung und Individualisierungen am flexibelsten, erzeugt aber auch die höchste CPU Last auf dem Web-Server.

Variante 2:

Für die einzelnen Seiten wird weiterhin PHP benutzt, jedoch wurden die Seiten bereits vorab ausgeführt, so dass der PHP-Interpreter nahezu nichts zu tun hat (keine Datenbank Abfragen etc.).

Variante 3:

Die einzelnen Seiten werden auf dem Server nur bei Änderungen neu generiert. Sie werden als HTML Dateien abgelegt und können direkt vom Web-Server ohne Ausführung des PHP-Interpreters zum Besucher geschickt werden. 

Ergebnis des Benchmarks

Bei den erreichten Transferraten zeigt sich ein deutlicher Unterschied. Auch wenn Variante 2 schon bessere Ergebnisse liefert, ist die rein statische HTML Variante 3 noch einmal deutlich schneller.

  Variante 1
(voll dynamisch, PHP)

Variante 2
(kaum dynamisch, PHP)

Variante 3
(statisch, HTML)
Requests per second: 6,2 9,5 12,9
Time per request [ms] (mean): 161,0 105,6 77,6
Transfer rate [Kbytes/sec] received: 354,6 538,9 735,4

Andinet Benchmark Statistik

Die folgende Übersicht zeigt die Zeiten für den Verbindungsaufbau, das Verarbeiten der Seite und Verzögerungen:

Variante 1 (voll dynamisch, PHP):

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 11 6.9 16 31
Processing: 57 150 449.3 89 5203
Waiting: 35 128 449.5 62 5172
Total: 67 161 449.3 96 5219

Variante 2 (kaum dynamisch, PHP):

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 10 6.3 11 26
Processing: 53 95 42.0 78 442
Waiting: 28 72 42.0 53 410
Total: 62 105 42.0 94 457

Variante 3 (statisch, HTML):

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.4 0 16
Processing: 2 77 35.2 94 374
Waiting: 0 73 33.9 90 119
Total: 2 78 35.1 94 374

Die nächste Grafik zeigt die prozentuale Verteilung - wie viele Anfragen wurden in einer bestimmten Zeit (ms) verarbeitet.

Andinet Apache Bench Vergleich

Update: Was bringt der Umzug von einem Shared-Hosting Tarif zu einem eigenen (Managed)-Server?

Nach dem Wechsel zu einem eigenen dedizierten Server ist natürlich interessant zu sehen, inwiefern sich der Schritt auf die Website-Performance auswirkt. Hier ist eine neue Messung auf einem Managed Server zum Vergleich mit den obigen Werten, die noch auf einem Shared-Webhosting Paket gemessen wurden. Hinweis: Der Vergleich eignet sich leider nur bedingt, da nicht nur das System, sondern auch der Provider sich geändert hat.

Variante 3 (statisch, HTML, aber dedizierter Server):

Connection Times (ms)
  min mean[+/-sd] median max
Connect: 0 1 4.9 0 62
Processing: 13 28 9.4 31 94
Waiting: 11 25 7.3 31 47
Total: 13 28 11.7 31 141

 

Kennst du das Apache Bench Tool? Hast du Erfahrung mit anderen Benchmark-Tools oder weitere Tipps? Schreibe doch einen Kommentar.

Kommentare 1

Uwe K. (2019-06-09)
Der Geschwindigkeitsvergleich ist sehr interessant. Ich hätte nicht vermutet, dass der Unterschied zwischen PHP und HTML bei der Webserver-Seitenauslieferungszeit so groß ist. Ich frage mich, ob das auch für meinen Provider gilt bzw. ob die Unterschiede generell so deutlich sind. Kennt jemand einen guten Link dazu im Web? Für mich ist der Umstieg auf statisches HTML leider kein Option, sehr schade, wenn ich diese Benchmarks hier lese. Aus SEO Sicht spielt die Performance/Geschwindigkeit des Web-Servers eine immer entschiedenere Rolle, insbesondere für mobile Websites.

 

Neuen Kommentar schreiben: