Performance-Tuning ist eine ganzheitliche Angelegenheit. In diesem Tutorial werden einige der gängigsten Optimierungseinstellungen in der Apache2-Konfiguration beschrieben. Neben wichtigen Anpassungen bzgl. des Prozessmanagements sind die Deaktivierungen nicht gebrauchter Features und Module wichtige Schritte. Hinzu kommen Einstellungen bzgl. des http-Protokolls und einige Finetuning-Maßnahmen. Optional können Sie, wenn die Last zu groß geworden ist, Ihren Content auf mehrere Apache-Webserver verteilen.
Optimierung des Prozessmanagements
Im Wesentlichen gibt es drei Parameter in der httpd.conf, mit denen Sie die Prozessbearbeitung von Apache2 tunen können.
Limitierung der gleichzeitigen Client-Verbindungen:
Zu viele Anfragen können Apache in die Knie zwingen. Mit dem Attribut MaxRequestWorkers – in den Versionen bis 2.3.13 lediglich „MaxClients“ genannt – können Sie die Anzahl der Apache-Prozesse und damit der Client-Verbindungen bestimmen, die gleichzeitig zugelassen werden. Dafür muss allerdings das Multi-Processing-Modul prefork laufen, welches im Vorwege die eingehenden Anfragen aufteilt. Ein weiteres MPM namens „worker“ sorgt für die Fähigkeit, sowohl mehrfache Threads als auch mehrfache Prozesse gleichzeitig verarbeiten zu können. Die Nutzung der Threads versetzt Apache in die Lage, mehr Verbindungen mit weniger Systemressourcen zu bedienen. Wollen Sie den Wert des Parameters größer als 256 einstellen, müssen Sie zusätzlich eine entsprechende Erhöhung des Attributs ServerLimit vornehmen.
[sc name=“adsense_InText_ad“]
Prozesse einsparen:
Durch die Nutzung des prefork MPM können Sie den Parameter MinSpareServers einsetzen, der die minimale Anzahl an unbeschäftigten Prozessen angibt. Auf diese Weise werden die betreffenden Tasks nicht beendet und können bei neuen Anfragen sofort herangezogen werden. Dies spart Zeit, weil die entsprechenden Prozessaufrufe und -starts wegfallen. Daneben gibt es diese Attribute, mit denen Sie die Prozessanzahl reglementieren können:
– MaxSpareServers: Höchstanzahl der unbeschäftigten Prozesse
– MinSpareThreads (bei aktivem MPM worker): Mindestanzahl an untätigen Threads
– MaxSpareThreads (bei aktivem MPM worker): Maximale Zahl untätiger Threads
– StartServers: Anzahl der Prozesse beim Start des Apache-Servers
Größe des Arbeitsspeichers (RAM):
Jeder Prozess benötigt eine gewisse Anzahl an MB. Daher ist es wichtig, die Größe des Arbeitsspeichers zu kennen und gegebenenfalls zu erweitern. Geht der RAM aus, schreibt Linux in die Swap-Datei. Im laufenden Betrieb wäre das eine Katastrophe. Je größer der Arbeitsspeicher ist, desto mehr PageCache wird von Linux verwendet, was eine weitere Performance-Steigerung nach sich zieht.
Apache2 Module und Features aufräumen
Module:
Standardmäßig wird Apache2 mit einer großen Anzahl an Funktionalitäten und Modulen installiert. Sie müssen das unbedingt anpassen, weil jede Anfrage nahezu alle Module durchläuft.
Es wird zwischen dynamisch geladenen und statisch kompilierten Modulen unterschieden. Letztere können Sie nur durch eine neue Kompilierung des Apache Binary deaktivieren. Das ist keine gute Idee, weil Ihr Apache Server dann jedes bereits installierte Sicherheitsupdate neu einbinden muss.
Nachstehend ist eine kleine Auswahl an dynamischen Modulen aufgelistet, die in den meisten Anwendungsfällen Sinn machen:
– mod_log_config: ermöglicht access_log-Files in vielen Formaten
– mod_cgi: CGI-Zulassung
– mod_suexec: erlaubt bestimmte User, CGI zu starten
– mod_php4 oder mod_php5: ist schneller als ältere PHP-Varianten oder CGI (nur nicht so sicher)
– mod_alias: zum Anzeigen virtueller Verzeichnisse
– mod_vhost_alias: erlaubt die Anlegung virtueller Maschinen (Hosts)
– mod_mime: automatisches Setzen der richtigen Header (gemäß Dateiendung)
– mod_deflate: erlaubt dem http-Protokoll die serverseitige Kompression der Inhalte
Features:
In der httpd.conf sollten Sie den Wert von HostnameLookups prüfen. Seit der Version 1.3 ist er standardmäßig mit „off“ eingestellt. Das muss so sein, denn andernfalls würde jede Anfrage die Performance-Bremse einer DNS-Namensauflösung bzgl. der jeweiligen Client-IP-Adresse nach sich ziehen.
Mit der KeepAlive-Funktion des http-Protokolls können mehrere Client-Anfragen über die gleiche TCP-Connection empfangen werden. Defaultmäßig ist das aktiv und kann über den Parameter KeepAlive eingestellt werden. Ein zweites Attribut namens KeepAliveTimeout (Standard: 5 Sekunden) legt die Zeitspanne fest, wie lange die Task jeweils auf weitere Verbindungsanfragen warten sollen.
Was Sie sonst noch tun können
Apache bietet Ihnen mit dem Tool „ab“ eine Benchmark-Funktionalität, die Sie nutzen können. Läuft auf Ihrer Seite PHP, empfiehlt sich zudem der Einsatz eines PHP Profilers.
Das Modul mod_status ermöglicht die Abfrage des Webserverstatus von Ihrem Client oder einem anderen Server mit dem Kommando https:///server-status. Die IP-Adresse des abfragenden Rechners muss i.d.R. dafür explizit freigeschaltet werden. Alternativ können Sie ein Shell-Skript programmieren, das z.B. die Anzahl der Prozesse und die CPU-Auslastung ermittelt.
Sollten alle Stricke reißen und sämtliche Optimierungseinstellungen nichts bringen, ist die Anfragelast wahrscheinlich zu hoch geworden. Freuen Sie sich. Ihr Portal ist begehrt. Um die Performance wieder in eine angenehme Umlaufbahn zu befördern, empfiehlt sich die Verteilung Ihrer Inhalte auf mehrere Webserver.
Dieser Artikel ist Teil des Workshops „Performance-Tuning für Ihre Website“ – Eine Übersicht aller Teile des Workshops finden Sie hier.
Artikelbild: © fotolia.com / kran77