Webseiten beschleunigen mit APC Cache

phpLangsame 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:

APC INFO - Google Chrome_2011-01-08_22-49-27

Wenig Aufwand für eine Geschwindigkeitsoptimierung in dieser Größe, oder?

5 Kommentare

An Diskussionen teilnehmen.

Tobi
17. Februar 2011 um 13:15

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.

Doris
2. März 2011 um 10:33

Hallo, wie kann man den APC kurzzeitig deaktivieren ohne ihn gleich zu deinstallieren? Ich befürchte er stört eine andere Anwendung

Doris
2. März 2011 um 14:39

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!

3.18 Cache Settings
13. Dezember 2013 um 16:58

[…] hier noch die Quellen, wo ich diese Infos her habe: Mehr Geschwindigkeit dank memcache(d) | Felix Webseiten beschleunigen mit APC Cache ? Provinzblogger Alternativer PHP Cache (APC) installieren | Sirmark bloggt Die oben genannten Befehle sollen keine […]

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.