Optimierung für Apache, PHP und MySQL für Drupal und andere Web-Anwendungen

Mo, 14.12.2009 - 19:09 -- Daniel Espendiller

Für Drupal findet man im Internet genug "Performance Tuninganleitungen", die man teilweise auch generell in jeder Serverkonfiguration berücksichtigen sollten. Die sinnvollsten, unter anderem für LAMPP / XAMPP, habe ich mal kurz Zusammengefasst. Auf meinem vServer konnte ich damit die Dauer einer Seitengenerierung und somit die Serverauslastung erheblich reduzieren, wie man an der Webseiten-Leistung innerhalb der Google-Webmaster Tools sehen kann.

MySQL Cache

Nach dem Aktivieren des MySQL-Query Cache werden SQL-Abfragen bzw. deren Ergebnis gespeichert. So das bei einem erneuten Aufruf des Statements das gespeicherte Ergebnis genutzt werden kann. Besonders bei großen Abfragen macht sich das bemerkbar. Der Cache wird natürlich automatisch erstellt und bereinig, sobald Änderungen an Tabellen bzw. Datensätzen gemacht werden.
Zum Aktivieren reicht es die Variable query_cache_size zu setzen, diese kann testweise zur Laufzeit gemacht werden, sollte dann aber dann in der Configfile aktiviert werden.

mysql\bin\my.ini oder etc/my.cnf

[mysqld]
[...]
query_cache_size=32M

oder höher

Zum Testen, ob der Cache aktiviert und genutzt wird einfach mal folgenden SQL Zeile auf dem MySQL-Server absetzen

show variables like 'query_cache_%';

PHP-Optimizer

Gerade für CMS-System wie Drupal sollte ein PHP-Optimzer / Compiler auf dem Webserver aktiviert werden. Die ausgeführten PHP-Scripte werden in compliertem Zustand abgelegt. So das der PHP-Interpeter sie nicht neu "durchrendern" muss. Nach Aktivierung eines Optimizer, werden Seiten gut doppelt so schnell aufgerufen. Nutzt man XAMPP / LAMPP so bietet sich an, den eAccelerator zu nutzen, dort sind bereits alle nötigen Module integriert. Zum Aktivieren müssen nur ein paar Zeilen in der php.ini auskommentiert werden.

eAccelerator installieren

Zum Installation bzw. Aktivierung es eAccelerator reicht es, insofern man die XAMPP / LAMPP nutzt, die folgenden Zeilen auszukommentieren. Standardmäßig werden so 32MB des Arbeitsspeicher genutzt, um die PHP-Skripte zu Cache und sie schnell im Zugriff zu haben. Alles darüberhinaus wird automatisiert nach Prioritäten auf die Festplatte ausgelagert.

Windows

[eAccelerator]
extension=eaccelerator.dll
eaccelerator.shm_size = "32"

Linux
extension="eaccelerator.so"
eaccelerator.shm_size="32"

eventuell noch den Pfad zur Ablage der Cache-Dateien prüfen:

eaccelerator.cache_dir

. Sonst wird nur der RAM genutzt.

Webinterface für eAccelerator

Um eine Kontrolle und eine Übersicht über zwischengespeicherten PHP-Skripte zu haben, gibt es für den eAccelerator ein Webinterface. Es muss gesondert aktiviert / freigegeben werden, dazu muss das originale eAccelerator Archiv von den Entwicklern runtergeladen werden. Dort enthalten ist eine Datei mit dem Namen control.php. Man öffnet diese Datei und editiert User und Kennwort seinen Bedürfnissen und liegt die so ab, dass man sie über einen Browser öffnen kann.
Erst durch Freigabe des Speicherortes in der php.ini mit der Variable eaccelerator.allowed_admin_path = "/deinpfad/www/admin" kann man die Datei aufrufen.

Statische Webseite über Boost

Nichts wird schneller übertragen als statische HTML Seiten. Für Drupal gibt es ein Module (Boost) welches alle generierten Seiten als HTML-Seiten ablegt. Es wird durch eine paar einfache rewrite Regeln überprüfen, ob bereits eine aktuelle gespeicherte HTML-Datei der aufgerufen Seite existiert. Diese wird bei Bedarf generiert und zukünftig (solange die jeweilige Seite noch gültig ist) nur noch direkt die HTML-Seite ohne Datenbankaufrufe an den Browser geschickt. Neben der HTML-Seite wird übrigens auch gleich eine gzip komprimierte Datei gespeichert, so können selbst Browser, die komprimierte Aufrufe unterstützen, direkt beliefert werden. Das ganze Verhalten funktioniert allerdings nur für nicht eingeloggte User!

gzip Komprimierung

Um Bandbreite zu sparen lassen sich Webseiten komprimiert ausliefern lassen. Allerdings werden so Seiten verständlicherweise nur komplett ausgeliefert. Ohne eine Komprimierung werden die Seiten stückchenweise an den Browser geschickt, der dann bereits anfängt zu rendern. Im einem LAN (Intranet) ist diese Option nicht gerade sinnvoll. Normalerweise kann man in Drupal die Option unter Performance bzw. Leistung aktivieren. Google meckert über die Webmaster-Tools allerdings bei meiner Seite immer noch rum, eine generelle Komprimierung kann man deswegen über eine htaccess für alle Skripte unterhalb dieser Datei bewerkstelligen.

.htaccess

AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css