Apache-Installation optimieren und selbst übersetzen

Es ist zwar recht einfach, sich eine fertige Binary vom Apache Server herunterzuladen oder sogar gleich XAMPP herunterzuladen, doch wie so oft, ist der einfache Weg nicht unbedingt der beste. Die Binary-Distributionen sind stets so ausgelegt, dass sie mit möglichst vielen Systemkonfigurationen funktionieren. Und Kompatibilität bedeutet, dass auf die besonderen Fähigkeiten ihres Server-Systems keine Rücksicht genommen werden kann. Deshalb sollte man bei größeren Projekten darauf achten, dass man den Source Code selbst übersetzt.

Um das zu tun, lädt man sich die für das Betriebssystem passende Source-Distribution herunter. Ich erkläre es hier am Unix-System, weil die Anzahl an Unix / Linux – Servern die der unter Windows laufenden wohl weit übersteigt.
Anschließend entpackt man das Archiv mit
tar xzvf httpd-2.2.4.tar.gz cd httpd-2.2.4
Die Datei- und Verzeichnisnamen müssen natürlich je nach aktueller Version geändert werden.

Nun vervollständigen Sie die Konfiguration mit ./configure und den Parametern der folgenden Text-Abschnitte. Alle dort erwähnten Parameter müssen an das configure script im Apache-Source-Ordner uebergeben werden. (zusätzlich zu Ihren eigenen).

Die wichtigste Veränderung am Apache 2 ist das neue Thread-Modell, das es ermoeglicht viele Anfragen mit wenigen Prozessen zu behandeln. Standardmäßig benutzt Apache 2 jedoch das aus der Version 1.x bekannte pre-fork Modell, welches fuer jede Verbindung einen neuen Prozess erstellt und somit natürlich Unmengen an Ressourcen verbraucht.

Im Apache 2 gibt es so genannte Multi-Processing Modules, wobei wir uns für ein Modell entscheiden müssen:
Das MPM-Worker-Modul benutzt mehrere Kind-Prozesse, wobei jedes Kind viele Threads erstellt. Jeder Thread behandelt eine Verbindung.
Dieses Modul ist vor allem für High-Traffic Server zu empfehlen weil es besser mit dem zur Verfügung stehenden Speicher umgeht als das prefork Modul.

Das MPM-Prefork-Modul benutzt mehrere Kind-Prozesse wo jeder „EINEN“ Thread hat. Jeder Prozess behandelt eine Verbindung, das heißt bei 100 Clients hat man 100 Prozesse mit 100 Threads. Auf vielen Systemen ist dieses Modul schneller als der Worker,
jedoch verbraucht es Unmengen an Speicher, was diesen Vorteil zunichte macht. Dieses Modul wird jedoch gebraucht, wenn nicht threadsichere Apache-Module oder Bibliotheken benutzt werden. Wenn man es nicht wirklich unbedingt benötigt, sollte man auf keinen Fall Prefork einsetzen.

fuer den worker uebergeben Sie dem Konfigurationsscript:
–with-mpm=worker

fuer das Prefork-Modull:
–with-mpm=prefork (NICHT EMPFOHLEN)

Nun wollen wir noch die Atomic Operations optimieren. Unter Linux (x86) und Solaris (Sparc/x86) bringt die Option –enable-nonportable-atomics auch noch einen kleinen Performance-Vorteil.
Diese Option veranlasst Apache dazu, bessere atomic operations (z.B integer-Inkrementierung) durchzuführen. Auf SPARC Plattformen ist das messbar, unter der normalen x86-Architektur fällt das kam auf, da es lediglich alte 386er Instructions und 486er Instructions gibt. Wobei 486er, welche mit –enable-nonportable-atomics aktiviert werden, immer noch schneller sind als der 386er Standardwert.

Apache kann nun übersetzt werden (nach ./configure mit den eigenen und Optimierungsparametern) was mit make && make install geschieht. Für detallierte Informationen ueben den Uebersetzungs- Vorgang sollten Sie sich zusätzlich http://httpd.apache.org/docs-2.0/ durchlesen.

Update (3.5.07): Seit Apache 2 als Stable verfügbar ist, fragt man sich, warum PHP nicht für diese Version empfohlen wird, bietet sie doch so viele Vorteile.

Das PHP-Team rät davon ab, PHP in Apache 2.0-Produktiv Umgebungen einzusetzen. Das liegt am neuen Thread-Modell welches in Apache übernommen wurde und dazu dient effektiver viele Anfragen zu bearbeiten.
Die Zend-Core von PHP ist zwar threadsafe, aber viele Bibliotheken auf die PHP benutzt sind es nicht.

Lange Rede kurzer Sinn: Wenn man diese Zeilen liest, fängt man nun wahrscheinlich an nachzudenken (wie der erste Kommentar), ob PHP überhaupt sinnvoll ist unter Apache 2. Ich sage ja. Auch wenn es nicht von den Entwicklern empfohlen wird, so läuft PHP mit eigentlich allen Features mittlerweile reibunglos unter Apache 2. Es lohnt auf keinen Fall nur wegen PHP auf eine Apache 1.3 Umgebung umzuschalten.

Jan hat 158 Beiträge geschrieben

5 Kommentare zu “Apache-Installation optimieren und selbst übersetzen

  1. RAPHEAD sagt:

    Sicher, dass das für PHP umgebungen sinn macht? Ich lese immernoch überall, dass PHP bzw. die Module nicht wirklich Thread safe sind.

  2. GhostGambler sagt:

    Zur Not kann man PHP auch als FCGI laufen lassen. Damit macht man sich einerseits natürlich den Vorteil kaputt, dass PHP als Thread läuft (was wahrscheinlich (ich weiß es nicht), langsamer ist), andererseits kümmert es dann nicht mehr, ob alle Bibliotheken und Extensions auch wirklich Thread-sicher sind.

    Wer Langeweile hat kann das ja mal benchmarken und das Ergebnis in meinem Gästebuch verlinken ^^ – würde mich persönlich schon interessieren, weil der aktuelle Stand im Team 2:2 ist (2 Entwickler für apache 1.3, 2 für apache 2) und da der Hauptprogrammierer leider zu der 1.3er-Kategorie zählt braucht es da schon handfeste Argumente für einen Wechsel auf 2.0 und da wir nicht gerade in irgendwelche Thread-Probleme laufen wollen läuft es so oder so auf FCGI hinaus… und da sind wir alle uns halt nicht so sicher, ob es dann wirklich noch schneller ist als der apache 1.3…

  3. Ralph sagt:

    Ich benutze Apache2 und PHP seit VIELEN Jahren…
    Vollkommen Problemlos…
    Solange man auf Threading verzichtet jedenfalls…

Eine Antwort schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert mit *

You may use these HTML tags and attributes: <a href=""> <blockquote cite=""> <pre lang=""> <b> <strong> <i> <em>