Ich habe während der letzten Wochen den Webpace für alle meine Websites in die USA übersiedelt – großteils aus technischen Gründen, aber auch, um auf die unfreundliche Rechtslage in Deutschland zu reagieren.

Eingemietet habe ich mich auf einem Virtual Private Server (VPS) bei Dreamhost. Mit welchen Einstellungen der Webserver am besten für meine Zwecke funktioniert, erkläre ich hier.

Dreamhost-Gutschein

Mit dem Gutscheincode TALKPRESS erhältst du 50 US$ Rabatt auf die erste Hostingrechnung. Hier geht’s zur Gutschein-Einlösung. Die 50 $ Rabatt erhältst du für jedes Dreamhost-Paket (Webhosting oder VPS)!

Mit Webspace spielt man nicht

Meine Ambitionen in Sachen Systemadministration sind recht überschaubar, gleichzeitig möchte ich auf meinem Server so nützliche Features wie ssh, Subversion oder rsync nutzen. Daraus folgt, ich bräuchte im Prinzip die Flexibilität eines root servers, und dazu einen Geek, der sich um den Webhost kümmert. Ein managed server ist andererseits überdimensioniert.

Zu solchen Ansprüchen passt der PS recht gut. Der Server wird innerhalb von einigen Tagen nach der Bestellung fertig mit allen nötigen Paketen wie Debian Linux, PHP, Python, Ruby und XCache eingerichtet. Im Kontroll-Panel kann man dem Server anschließend Hauptspeicher zwischen 150 MB und 4 GB zuweisen und damit gleichzeitig auch die zugeteilte Rechenleistung und den monatlichen Mietpreis steuern: 100 MB kosten 10 US$. Diese Zuteilung kann man „in Echtzeit“ beliebig oft selbst ändern.

Serverressourcen einstellen

Automatisch wird der „echte“ Speicher mit mit maximal 450 MB virtuellem Speicher verdoppelt. Dreamhost nennt das „burstable memory“, und weil „burstable“ so nach „Geschwindigkeit“ klingt, ist das die erste Falle, in die ich beim Zuteilen der Serverressourcen getappt bin.

Ressourcen für einen Dreamhost Private Server einstellen

In zwei Diagrammen lässt sich der tatsächliche Speicherverbrauch für die letzten 24 Stunden und für das laufende Monat ablesen.

Graph des Ressourcenverbrauchs für einen Dreamhost Private Server

Diese Kurven verführen dazu, sich an ein gerade noch ausreichendes niedriges Speicherlimit heranzutasten. Ein schwerer Fehler…

Muss ein so knapp gehaltener Server eine grössere Zahl an Anfragen parallel behandeln, steigt der Speicherverbrauch durch zusätzlich nötige PHP-Prozesse schnell über das physische Limit an. Die Folge: Virtueller Speicher wird über den Swap-Bereich der Festplatte ein- und ausgelagert, die Server wird lähmend langsam.

Weil die bereits vorhandenen PHP-Prozesse aber nicht mit der Abarbeitung der Anfragen fertig werden, beginnt der Webserver zusätzliche PHP-Prozesse zu starten, mit wiederum höherem Speicherverbrauch und noch mehr zeitraubendem Swapping auf die Festplatte.

Zu guter Letzt würgt das Betriebssystem bei akutem Speichermangel einige Prozesse brutal ab, um das System wieder in einen betriebsfähigen Zustand zu bringen. Resultat: Der Sitebesucher sieht nach zehn langen Sekunden Wartezeit nicht mehr als eine weiße Seite und sucht das Weite.

Empfehlung: Lass dem Webserver Luft zum Atmen und teile 80 oder 100 MB Speicher über dem durchschnittlichen Verbrauch zu. Um herauszufinden, wie stark der Speicherbedarf beim Aufruf einer bestimmten Seite wie etwa dem WordPress-Dashboard steigt, logge ich mich über ssh auf der Shell des Servers ein und lasse mir alle paar Sekunden die Speicherbelegung von free anzeigen:

robert@ps4711:~$ free -m -s3
             total       used       free     shared    buffers     cached
Mem:           381        206        174          0          0          0
-/+ buffers/cache:        206        174
Swap:          381          0        381

             total       used       free     shared    buffers     cached
Mem:           381        347         33          0          0          0
-/+ buffers/cache:        347         33
Swap:          381          0        381

             total       used       free     shared    buffers     cached
Mem:           381        204        176          0          0          0
-/+ buffers/cache:        204        176
Swap:          381          0        381

PHP einrichten

Der Webserver Apache kann PHP auf verschiedene Weise nutzen:

  1. Als externes CGI-Programm, das für jede einzelne angefragte PHP-Seite immer wieder von Neuem aufgerufen und nach Skriptende wieder beendet wird. Das ist die speicher-sparendste, aber auch langsamste Möglichkeit.
  2. Als Apachemodul mod_php. PHP wird hier als integraler Teil des Webservers ein einziges Mal geladen und bleibt dann „auf ewig“ im Speicher. Das hat Vorteile (Geschwindigkeit) und Nachteile (Speicherverbrauch).
  3. Über FastCGI. Für die Bearbeitung der PHP-Skripts werden einige separate Prozesse gestartet, die auch permanent geladen bleiben.

mod_php und FastCGI habe also recht ähnliche Eigenschaften. In der Praxis spricht vor allem ein Faktor gegen mod_php und für FastCGI:

mod_php führt jedes PHP-Skript mit den Rechten des Webserver-Users aus. Neben den damit verbundenen Sicherheitsrisiken ist das recht häufig auch unpraktisch. Legt ein PHP-Skript zum Beispiel Dateien oder Verzeichnisse an, ist der Webserver-User Besitzer dieser Dateien. Das ist im Regelfall nicht der selbe User, der zum Beispiel über FTP auf den Server zugreifen darf. Die daraus entstehenden Möglichkeiten, sich über die Gruppen- und Userrechte elegant ins Knie zu schießen, sind vielfältig.

Praktische Empfehlung daher: Wenn Geschwindigkeit wichtig ist, ist FastCGI zu geeignet. Wenn möglichst wenig Speicher genutzt werden soll, lasse PHP als externes CGI-Skript laufen.

Wie die PHP-Anbindung gehandhabt wird, lässt sich für jede Domain auf dem Server getrennt einstellen. Ich habe „unwichtige“ Sandkistensites sparsam konfiguriert und für beliebte Domains aus dem Vollen geschöpft:

PHP für eine Domain einstellen auf Dreamhost PS

XCache

Läuft PHP über FastCGI, lässt sich auch XCache benutzen. PHP ist eine interpretierte Skriptsprache, das heißt, dass der Programmcode bei jedem Aufruf erneut in vom Serverprozessor ausführbare Befehle übersetzt wird. Wird XCache eingeschaltet, bleibt das vom PHP-Interpreter übersetzte Skript in einem Zwischenspeicher und wird beim nächsten Aufruf zeitsparend wiederverwendet.

Statistikjunkies wie ich finden im XCache-Administrator, den ich von /dh/web/xcache-admin auf den eigenen Webspace kopiert habe, eine Übersicht über die Trefferquote des Caches und einige andere Betriebsparameter:

XCache-Administrator

22. Dezember 2008, 08:51 − Abgelegt in

Kommentarfunktion für diesen Artikel geschlossen.