PHP besitzt selbst keinen Cache, was dazu führt, dass ein Skript bei jedem Aufruf neu übersetzt werden muss. Um dem entgegenzuwirken, gibt es einige Erweiterungen, die diese Funktionalität nachrüsten, wie beispielsweise den eAccelerator den alternativen PHP Cache.

Da PHP selber noch keinen Cache besitzt, was zur Folge hat das die Skript immer und immer wieder neu übersetzt werden müssen, gibt es ein paar Erweiterungen, welche diese Funktion nachrüsten. Und schon sind wir beim Thema.

1.) APC (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. – Wiki

Als erstes schauen wir uns unsere aktuelle php-Config an…

vim /var/www/info.php
< ?php
phpinfo();
?>
w3m deine_webseite.abc/info.php

Zudem prüfen wir eben noch die momentane Geschwindigkeit unserer Webseite… z.B. auf www.linkvendor.com und internetsupervision.com

Nun installieren wir APC:

aptitude install php-pear
aptitude install php5-dev apache2-prefork-dev build-essential
pecl install apc
vim /etc/php5/conf.d/apc.ini

extension=apc.so
apc.enabled=1
apc.shm_size=30

Die Menge an Dateien welche im Speicher (apc.shm_size) gehalten werden sollen, kann man ganz nach Auslastung des Servers anpassen.

/etc/init.d/apache2 restart

2.) eAccelerator

eAccelerator ist eine Open Source Software zum Einsatz auf Webservern, die als Beschleuniger, Optimierer und Cache für PHP-Seiten dient. – Wiki

Wir schauen uns wieder unsere aktuelle php-Config an…

vim /var/www/info.php
1
<?php phpinfo(); ?>
w3m deine_webseite.abc/info.php

Geschwindigkeit unserer Webseite prüfen… z.B. auf www.linkvendor.com und internetsupervision.com

Nun installieren wir eAccelerator:

1
2
3
4
5
6
7
8
9
10
aptitude install build-essential php5-dev
cd /usr/src/
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar xvfj eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
phpize
./configure
make
make install
vim /etc/php5/conf.d/eaccelerator.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[eaccelerator]
extension = "eaccelerator.so"
 
eaccelerator.enable = "1"
eaccelerator.shm_size = "16"
eaccelerator.optimizer = "1"
eaccelerator.debug = "0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "7200"
eaccelerator.shm_prune_period = "7200"
eaccelerator.shm_only = "1"
eaccelerator.compress = "1"
eaccelerator.compress_level = "6"
eaccelerator.keys = "shm"
eaccelerator.sessions = "shm"
eaccelerator.content = "shm"
eaccelerator.allowed_admin_path = ""
mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator
/etc/init.d/apache2  restart

Und noch einmal die Geschwindigkeit deiner Webseite prüfen… z.B. auf www.octagate.com und internetsupervision.com

Konfiguration von eAccelerator:
—————————————

eaccelerator.shm_size
Die Menge an Arbeitsspeicher (in Megabytes) welche eAccelerator verwenden darf.
Der Standard Wert ist “0″.

eaccelerator.cache_dir
Gibt das Verzeichnis an, wo eAccelerator die vorkompilierten Daten auf der Festplatte speichern darf. Die gleichen Daten können auch im Speicher oder auch nur im Speicher untergebracht werden, was einen schnelleren Zugriff zu folge hätte.
Der Standard Wert ist “/tmp/eaccelerator”.

eaccelerator.enable
Ein- / Ausschalten von eAccelerator. Wobei “1″ gleich “an” bedeutet.
Der Standard Wert ist “1″.

eaccelerator.optimizer
Hier kannst du Ein- / Ausschalten ob der PHP-Code noch optimiert werden soll. Wobei “1″ gleich “an” bedeutet.
Der Standard Wert ist “1″.

eaccelerator.debug
Hier kannst du das Debug-Logging Ein- / Ausschalten.
Der Standard Wert ist “0″.

eaccelerator.check_mtime
Ein- / Ausschalten für die Prüfung, ob der PHP-Code geändert wurde und somit doch noch mal neu übersetzt werden sollte. Wobei “1″ gleich “an” bedeutet.
Der Standard Wert ist “1″.

eaccelerator.filter
Hier kannst du angeben welche Daten gecacht werden sollen. (z.B. “*.php *.phtml”) Wenn der Eintrag mit einem “!” beginnt, bedeutet dies, das diese Daten nicht gecacht werden. Der Standard Wert ist “”. -> was bedeutet, dass alles gecacht wird.

eaccelerator.shm_max
Wenn sehr große Daten nicht in den Arbeitsspeicher wandern sollen, dann mann man diesen Wert setzten. (z.B. 10240, 10K, 1M).
Der Standard Wert ist “0″.

eaccelerator.shm_ttl
Wenn eaccelerator keinen Arbeitsspeicher mehr zur Verfügung hat, werden alle Daten gelöscht, welche älter sind als z.B. “9000″ Sekunden (Webseiten welche die letzten 2 1/2 Stunden nicht besucht wurden)
Der Standard Wert ist “0″.

eaccelerator.shm_prune_period
Wenn eaccelerator keinen Arbeitsspeicher mehr zur Verfügung hat, werden die Daten welche vor z.B. 9000 Sekunden gecacht wurden gelöscht.
Der Standard Wert ist “0″.

eaccelerator.shm_only
Ein- / Ausschalten vom Cache auf der Festplatte.
Der Standard Wert ist “0″. -> Was bedeutet das sowohl im Arbeitsspeicher als auch auf der Festplatte gecacht wird.

eaccelerator.compress
Ein- / Ausschalten der Komprimierung der Daten.
Der Standard Wert ist “1″.

eaccelerator.compress_level
Stellt den Grad der Komprimierung ein.
Der Standard Wert ist “9″. -> Max. Komprimierung

3.) XCache

Opcode-Cacher zum PHP-Beschleunigen auf Servern, beschleunigt den Prozess des Kompilierens von PHP-Skripten, indem er den kompilierten Zustand von PHP-Skripten im RAM zwischenspeichert und die kompilierte Version direkt aus dem Hauptspeicher nutzt.

aptitude install php5-xcache

Test-Ergebnisse:

Mit folgendem Befehl habe ich die Geschwindigkeit meiner Webseite getestet, wobei ich in der Zwischenzeit, vom apache2 als Webserver Abstand genommen habe und voll auf “nginx” setzte. :-)

ab -n500 -c20 -dS "http://suckup.de/"
Somit wurden 500 Seitenaufrufe, davon 20 parallel ausgeführt, um einen Durchschnittswert zu erhalten habe ich den Befehl 3x ausgeführt hier die Ergebnisse…
APC
Time taken for tests:   283.903 seconds
Failed requests:        7
(Connect: 0, Receive: 0, Length: 7, Exceptions: 0)
Write errors:           0
Non-2xx responses:      1
Requests per second:    1.76 [#/sec] (mean)
Time per request:       11356.115 [ms] (mean)
Time per request:       567.806 [ms] (mean, across all concurrent requests)
Transfer rate:          163.99 [Kbytes/sec] received
Time taken for tests:   283.903 seconds
Failed requests:        7
(Connect: 0, Receive: 0, Length: 7, Exceptions: 0)
Write errors:           0
Non-2xx responses:      1
Requests per second:    1.76 [#/sec] (mean)
Time per request:       11356.115 [ms] (mean)
Time per request:       567.806 [ms] (mean, across all concurrent requests)
Transfer rate:          163.99 [Kbytes/sec] received
Time taken for tests:   326.240 seconds
Failed requests:        6
(Connect: 0, Receive: 0, Length: 6, Exceptions: 0)
Write errors:           0
Requests per second:    1.53 [#/sec] (mean)
Time per request:       13049.596 [ms] (mean)
Time per request:       652.480 [ms] (mean, across all concurrent requests)
Transfer rate:          142.99 [Kbytes/sec] received
eAccelerator
Time taken for tests:   319.042 seconds
Failed requests:        1
(Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Requests per second:    1.57 [#/sec] (mean)
Time per request:       12761.670 [ms] (mean)
Time per request:       638.083 [ms] (mean, across all concurrent requests)
Transfer rate:          146.36 [Kbytes/sec] received
Time taken for tests:   308.115 seconds
Failed requests:        7
(Connect: 0, Receive: 0, Length: 7, Exceptions: 0)
Write errors:           0
Requests per second:    1.62 [#/sec] (mean)
Time per request:       12324.604 [ms] (mean)
Time per request:       616.230 [ms] (mean, across all concurrent requests)
Transfer rate:          151.55 [Kbytes/sec] received
Time taken for tests:   318.477 seconds
Failed requests:        3
(Connect: 0, Receive: 0, Length: 3, Exceptions: 0)
Write errors:           0
Requests per second:    1.57 [#/sec] (mean)
Time per request:       12739.091 [ms] (mean)
Time per request:       636.955 [ms] (mean, across all concurrent requests)
Transfer rate:          146.48 [Kbytes/sec] received
xcache
Time taken for tests:   286.726 seconds
Failed requests:        5
(Connect: 0, Receive: 0, Length: 5, Exceptions: 0)
Write errors:           0
Non-2xx responses:      1
Requests per second:    1.74 [#/sec] (mean)
Time per request:       11469.044 [ms] (mean)
Time per request:       573.452 [ms] (mean, across all concurrent requests)
Transfer rate:          162.53 [Kbytes/sec] received
Time taken for tests:   284.712 seconds
Failed requests:        4
(Connect: 0, Receive: 0, Length: 4, Exceptions: 0)
Write errors:           0
Requests per second:    1.76 [#/sec] (mean)
Time per request:       11388.497 [ms] (mean)
Time per request:       569.425 [ms] (mean, across all concurrent requests)
Transfer rate:          164.68 [Kbytes/sec] received
Time taken for tests:   311.922 seconds
Failed requests:        7
(Connect: 0, Receive: 0, Length: 7, Exceptions: 0)
Write errors:           0
Requests per second:    1.60 [#/sec] (mean)
Time per request:       12476.895 [ms] (mean)
Time per request:       623.845 [ms] (mean, across all concurrent requests)
Transfer rate:          150.31 [Kbytes/sec] received

Ähnliche Blog-Einträge: