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.
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.
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)
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
Für Andinet habe ich verschiedene Varianten der Website miteinander vergleichen, um die Performance-Unterschiede zu analysieren und das Framework zu optimieren.
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.
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.).
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.
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 |
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 |
Die folgende Übersicht zeigt die Zeiten für den Verbindungsaufbau, das Verarbeiten der Seite und Verzögerungen:
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
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
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.
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.
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.
Diese Website benutzt Cookies. 🍪 Wenn Sie die Website weiter nutzen, stimmen Sie der Verwendung von Cookies zu. Mehr Infos