Webseiten beschleunigen mit APC Cache
Langsame Webseiten sind nicht nur bei Besuchern unbeliebt, auch Google straft mittlerweile langsame Server ab und listet sie bei Suchergebnissen nur noch weiter unten.
Neben der Optimierung des Datenvolumens z.B. durch Bilderkomprimierung bietet sich bei Benutzung von dynamischen PHP Seiten der Einsatz eines Caches auf dem Server an.
Ich nutze APC unter Debian Lenny.
Der Alternative PHP Cache (APC) ist ein Open-Source-Zusatzmodul für PHP, das eine beschleunigte Ausführung von PHP-Programmen ermöglicht. Die Beschleunigung wird dadurch erreicht, dass der kompilierte PHP-Quelltext zwischengespeichert wird und bei wiederholter Ausführung das zeitaufwändige Kompilieren nahezu vollständig vermieden werden kann.
Die Installation ist binnen 5 Minuten erledigt und die Performance der Webseiten spürbar verbessert.
Zunächst messen wir die Geschwindigkeit vor der Installation um eine Vergleichsmöglichkeit zu habe:
#ab -c5 -n100 http://www.weltverschwoerung.de/forum.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.weltverschwoerung.de (be patient)…..done
Server Software: Apache
Server Hostname: www.weltverschwoerung.de
Server Port: 80
Document Path: /forum.php
Document Length: 63048 bytes
Concurrency Level: 5
Time taken for tests: 44.566 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 6351995 bytes
HTML transferred: 6304800 bytes
Requests per second: 2.24 [#/sec] (mean)
Time per request: 2228.302 [ms] (mean)
Time per request: 445.660 [ms] (mean, across all concurrent requests)
Transfer rate: 139.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 5 27.5 0 186
Processing: 437 2175 1718.4 1869 16514
Waiting: 422 2104 1705.6 1775 16498
Total: 437 2180 1716.5 1878 16514
Percentage of the requests served within a certain time (ms)
50% 1878
66% 2203
75% 2480
80% 2582
90% 3151
95% 3664
98% 7803
99% 16514
100% 16514 (longest request)
Dann installieren wir APC:
# apt-get install php-apc
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut
Lese Status-Informationen ein… Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht länger benötigt:
libevent1 libfcgi0ldbl portmap
Verwenden Sie »apt-get autoremove«, um sie zu entfernen.
Die folgenden NEUEN Pakete werden installiert:
php-apc
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 8 nicht aktualisiert.
Es müssen noch 0B von 59,3kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 180kB Plattenplatz zusätzlich benutzt.
Wähle vormals abgewähltes Paket php-apc.
(Lese Datenbank … 77519 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacke php-apc (aus …/php-apc_3.0.19-2_i386.deb) …
Richte php-apc ein (3.0.19-2) …
Das war es auch schon. Nun kann man erneut die Perfomance der Webseite messen und sollte eine deutliche Verbesserung feststellen:
# ab -c5 -n100 http://www.weltverschwoerung.de/forum.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.weltverschwoerung.de (be patient)…..done
Server Software: Apache
Server Hostname: www.weltverschwoerung.de
Server Port: 80
Document Path: /forum.php
Document Length: 63056 bytes
Concurrency Level: 5
Time taken for tests: 27.288 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 6352400 bytes
HTML transferred: 6305600 bytes
Requests per second: 3.66 [#/sec] (mean)
Time per request: 1364.401 [ms] (mean)
Time per request: 272.880 [ms] (mean, across all concurrent requests)
Transfer rate: 227.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 292 1334 1652.1 890 13276
Waiting: 283 1317 1648.9 884 13268
Total: 292 1334 1652.1 890 13276
Percentage of the requests served within a certain time (ms)
50% 890
66% 1127
75% 1491
80% 1603
90% 2315
95% 4183
98% 7375
99% 13276
100% 13276 (longest request)
Wie man sieht war die Aktion von Erfolg gekrönt.
Das Konfigurationsfile sieht so aus – diese Einstellungen sind in den meisten Fällen ausreichend:
#vi /etc/php5/apache2/conf.d/apc.ini
extension = apc.so
apc.enabled = 1
apc.shm_size = 48
apc.include_once_override = 1
apc.mmap_file_mask = /tmp/apc.XXXXXX
Ein grafisches Frontend installiert man, indem man die Datei apc.php in sein Webverzeichnis kopiert:
#cp /usr/share/doc/php-apc/apc.php /var/www/vhosts/weltverschwoerung.de/httpdocs/apc.php
Voila – so sollte es dann aussehen:
Wenig Aufwand für eine Geschwindigkeitsoptimierung in dieser Größe, oder?
Hi,
ich hätte eine Frage da ich auch grade mit ab spiele. Hast du eine Erklärung dafür, dass die Zugriffszeiten auf den letzten Prozent so ansteigen? Das Phänomen habe ich unabhängig davon was ich anspreche oder ausliefer. Egal ob dynamischer Content oder statisches File. Bei einer immer höheren Zahl an gleichzeitigen Anfragen braucht der Server für ein paar wenige Anfragen wesentlich mehr Zeit als für die restlichen.
Hallo, wie kann man den APC kurzzeitig deaktivieren ohne ihn gleich zu deinstallieren? Ich befürchte er stört eine andere Anwendung
http://www.php.net/manual/en/apc.configuration.php#ini.apc.enabled
Super – klappt, auf der GUI steht dann nach dem apache restart, dass apc nicht läuft! Und siehe da, apc ist nicht mein Störenfried. Also gleich wieder auf 1. Vielen Dank!