Website-Suche

5 Tipps zur Steigerung der Leistung Ihres Apache-Webservers


Laut einem aktuellen Bericht von Netcraft (einem bekannten Internetunternehmen, das unter anderem Statistiken zur Webbrowser-Nutzung bereitstellt) ist Apache nach wie vor der am häufigsten verwendete Webserver unter Websites und mit dem Internet verbundenen Computern.

Darüber hinaus verzeichnet Apache weiterhin das größte Wachstum unter den Top-Webservern, gefolgt von Nginx und IIS. Wenn Sie also als Systemadministrator für die Verwaltung von Apache-Installationen verantwortlich sind, müssen Sie wissen, wie Sie sicherstellen können, dass Ihr Webserver entsprechend Ihren Anforderungen (oder denen Ihres Kunden) die bestmögliche Leistung erbringt.

In diesem Artikel besprechen wir einige Tipps, die Ihnen helfen, sicherzustellen, dass Apache reibungslos läuft und die Anzahl der Anfragen verarbeiten kann, die Sie von Remote-Clients erwarten.

Bitte bedenken Sie jedoch, dass Apache nicht mit dem Ziel entwickelt wurde, Benchmark-Rekorde aufzustellen – dennoch ist es dennoch in der Lage, in fast jedem erdenklichen Anwendungsfall eine hohe Leistung zu bieten.

TIPP Nr. 1: Halten Sie Apache immer auf dem neuesten Stand

Es versteht sich von selbst, dass die Installation der neuesten Version von Apache wahrscheinlich eines der ersten Dinge ist, die Sie berücksichtigen müssen. Seit dem 19. November 2015 ist die neueste Version von Apache, die in den CentOS 7-Repositorys verfügbar ist, 2.4.6, während sie in Debian ist >2.4.10.

Es kann jedoch sein, dass einer neu veröffentlichten stabilen Version eine aktuelle Verbesserung oder eine Fehlerbehebung hinzugefügt wurde, die dann zum Herunterladen und Installieren von der Quelle bereitgestellt wird. Hier finden Sie auch Kompilierungs- und Installationsanweisungen. Denken Sie jedoch daran, dass Sie vorsichtshalber möglicherweise Ihre aktuellen Konfigurationsdateien/Sites/virtuellen Hosts sichern möchten, wenn Sie sich für diese Update-Methode entscheiden.

In jedem Fall können Sie Ihre aktuell installierte Version wie folgt überprüfen:

httpd -v               [On RedHat/CentOS based systems]
apache2 –v             [On Debian/Ubuntu based systems] 

Als Faustregel gilt: Bleiben Sie bei der Aktualisierungsmethode, die vom Paketmanager der von Ihnen gewählten Distribution bereitgestellt wird (yum update httpd oder aptitude safe-upgrade apache2, für CentOS oder Debian, bzw.), es sei denn, es geht nicht anders. Sie können die neuesten Versionshinweise im Abschnitt „Apache-Dokumentation“ auf der Website des Apache-HTTP-Serverprojekts lesen.

TIPP Nr. 2: Wenn Sie einen Kernel verwenden, der älter als 2.4 ist, sollten Sie jetzt über ein Upgrade nachdenken

Warum? In den Kernelversionen 2.4 und höher ist der Kernel-Systemaufruf sendfile standardmäßig aktiviert. Dies wiederum erleichtert Netzwerkdateiübertragungen mit hoher Leistung (die im Kontext der Webserver-Client-Kommunikation erwünscht sind) und ermöglicht es Apache, statische Inhalte schneller und mit geringerer CPU-Auslastung bereitzustellen, indem es gleichzeitige Lese- und Sendevorgänge durchführt.

Sie können Ihren aktuell installierten Kernel anzeigen mit:

uname -r

und vergleichen Sie ihn mit dem neuesten stabilen Kernel in www.kernel.org (4.3 zum Zeitpunkt des Verfassens dieses Artikels).

Obwohl es sich nicht um einen Prozess handelt, der für Anfänger gedacht ist, ist das Aktualisieren Ihres Kernels eine interessante Übung, um mehr über die Interna von Linux zu erfahren.

TIPP #3: Wählen Sie das Multi-Processing-Modul (MPM), das für Ihren Fall am besten geeignet ist

In der Praxis erweitern MPMs die modulare Funktionalität von Apache, indem sie es Ihnen ermöglichen, zu entscheiden, wie Sie den Webserver so konfigurieren, dass er sich an Netzwerkports auf dem Computer bindet, Anfragen von Clients akzeptiert und untergeordnete Prozesse (und Threads) verwendet. alternativ) zur Bearbeitung solcher Anfragen.

Ab Version 2.4 bietet Apache je nach Bedarf drei verschiedene MPMs zur Auswahl:

  1. Das prefork MPM verwendet mehrere untergeordnete Prozesse ohne Threading. Jeder Prozess verarbeitet jeweils eine Verbindung, ohne für jede separate Threads zu erstellen. Ohne zu sehr ins Detail zu gehen, können wir sagen, dass Sie dieses MPM nur verwenden möchten, wenn Sie eine Anwendung debuggen, die nicht-thread-sichere Module wie mod_php verwendet, oder wenn Ihre Anwendung damit umgehen muss.
  2. Der worker MPM verwendet mehrere Threads pro untergeordneten Prozess, wobei jeder Thread jeweils eine Verbindung verarbeitet. Dies ist eine gute Wahl für Server mit hohem Datenverkehr, da dadurch mehr gleichzeitige Verbindungen mit weniger RAM als im vorherigen Fall verarbeitet werden können.
  3. Schließlich ist das event MPM das Standard-MPM in den meisten Apache-Installationen für Versionen 2.4 und höher. Es ähnelt dem Worker-MPM darin, dass es ebenfalls mehrere Threads pro untergeordnetem Prozess erstellt, jedoch mit einem Vorteil: Es verursacht KeepAlive- oder idle-Verbindungen (während sie in diesem Zustand bleiben). von einem einzelnen Thread verarbeitet werden, wodurch Speicher frei wird, der anderen Threads zugewiesen werden kann. Dieses MPM ist nicht für die Verwendung mit nicht-threadsicheren Modulen wie mod_php geeignet, für die stattdessen ein Ersatz wie ein PHP-FPM verwendet werden muss.

Um das von Ihrer Apache-Installation verwendete MPM zu überprüfen, können Sie Folgendes tun:

httpd -V

Das Bild unten zeigt, dass dieser bestimmte Webserver das Prefork MPM verwendet.

Um dies zu ändern, müssen Sie Folgendes bearbeiten:

/etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
/etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems]

Dabei kann mpm_event, mpm_worker oder mpm_prefork sein.

und entkommentieren Sie die Zeile, die das gewünschte Modul lädt, wie folgt:

LoadModule mpm_event_module modules/mod_mpm_event.so

Hinweis: Damit das Ereignis-MPM in Debian funktioniert, müssen Sie möglicherweise das libapache2-mod-fastcgi-Paket von Non-Free installieren Repositories.

Darüber hinaus benötigen Sie für CentOS php-fpm (zusammen mit fcgi und mod_fcgid), während es in Debian php5-fpm< heißt (zusammen mit apache2-mpm-event).

Zu guter Letzt starten Sie den Webserver und den neu installierten Dienst php-fpm (oder php5-fpm) neu:

Auf RedHat/CentOS

systemctl restart httpd php-fpm && systemctl enable httpd php-fpm

Auf Debian/Ubuntu

systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Obwohl Sie Apache so einstellen können, dass er ein bestimmtes MPM verwendet, kann diese Konfiguration auf der Basis einzelner virtueller Hosts auf die gleiche Weise wie zuvor beschrieben überschrieben werden.

Fügen Sie einfach die entsprechenden Tags in die Konfigurationsdatei für jeden virtuellen Host ein und schon kann es losgehen – stellen Sie jedoch sicher, dass Sie ein und nur ein MPM pro vHost verwenden.

Bitte beachten Sie abschließend, dass php-fpm unabhängig von der von Ihnen gewählten Distribution auf der Implementierung von FastCGI basiert, weshalb ich zuvor die Installation zusätzlicher Pakete empfohlen habe.

Weitere Details und Beispiele zu php-fpm und wie es zusammen mit dem Event-MPM die Leistung von Apache steigern kann, finden Sie in der offiziellen Dokumentation.

Dies ist, was ich sehe, nachdem ich das Standard-MPM von „Prefork“ auf „Event“ in demselben Feld geändert habe, das im vorherigen Bild gezeigt wurde:

In CentOS 7 müssen Sie sicherstellen, dass die Dienste http und https durch die Firewall aktiviert sind und dass die Netzwerkschnittstelle(n) aktiviert sind ) werden ordnungsgemäß zur Standardzone hinzugefügt.

Zum Beispiel:

firewall-cmd --zone=internal --add-interface=tun6to4 
firewall-cmd --zone=internal --add-interface=tun6to4 --permanent 
firewall-cmd --set-default-zone=internal 
firewall-cmd --add-service=http 
firewall-cmd --add-service=https 
firewall-cmd --add-service=http --permanent 
firewall-cmd --add-service=https --permanent 
firewall-cmd --reload

Der Grund, warum ich dies anspreche, ist, dass ich kürzlich ein Problem hatte, bei dem die standardmäßigen Firewalld-Konfigurationseinstellungen in einem Cloud-VPS php-fpm und Apache daran hinderten, PHP-Dateien zu verarbeiten.

Als einfachen Test (ich bin mir sicher, dass Ihnen kompliziertere oder stressigere Tests einfallen) werde ich eine PHP-Datei erstellen, die das Vorhandensein einer anderen Datei namens test.php im selben Verzeichnis von zwei CentOS überprüft 7 Server mit den gleichen Hardwareeigenschaften und der gleichen Auslastung, aber mit unterschiedlichem MPM. Einer von ihnen verwendet Event und der andere Prefork:

Dies ist der PHP-Code, den ich in einer Datei namens checkiffileexists.php gespeichert habe:

<?php
$filename = 'test.php';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

Anschließend führen wir das Apache-Benchmark-Tool (ab) mit 200 gleichzeitigen Anfragen aus, bis 2000 Anfragen abgeschlossen sind:

ab -k -c 100 -n 2000 localhost/checkiffileexists.php

Lassen Sie uns den Test durchführen und die Ergebnisse vergleichen. Achten Sie auf die Leistungsstatistiken:

Wie Sie sehen können, ist die Leistung des Servers mit Ereignis in jedem Aspekt dieses Tests seinem Prefork-Pendant deutlich überlegen.

TIPP Nr. 4: Weisen Sie den Arbeitsspeicher für Apache sinnvoll zu

Der vielleicht kritischste Hardware-Punkt, der berücksichtigt werden muss, ist die Menge an RAM, die jedem Apache-Prozess zugewiesen wird. Obwohl Sie dies nicht direkt steuern können, können Sie die Anzahl der untergeordneten Prozesse durch die Direktive MaxRequestWorkers (früher bekannt als MaxClients in Apache 2.2) einschränken. Dadurch wird die RAM-Nutzung durch Apache begrenzt. Auch hier können Sie diesen Wert pro Host oder pro virtuellem Host festlegen.

Dazu sollten Sie sich die durchschnittlich von Apache verwendete RAM-Menge notieren und diese dann mit der Anzahl der MaxRequestWorkers multiplizieren. Das ist die Menge an Speicher, die Apache-Prozessen zugewiesen wird. Sie möchten niemals, dass Ihr Webserver mit der Verwendung von Swap beginnt, da dadurch seine Leistung erheblich beeinträchtigt wird. Daher sollten Sie die RAM-Nutzung durch Apache immer innerhalb der Grenzen halten, die Sie sich leisten können, und sich niemals auf Swap verlassen.

Der folgende Block beschränkt beispielsweise die Anzahl gleichzeitiger Clients auf 30. Wenn mehr Clients den Host erreichen, kann es zu einer Verzögerung oder einem vorübergehenden Fehler kommen, der leicht durch eine Aktualisierung des Browsers behoben werden kann. Dies kann zwar als unerwünscht angesehen werden, ist jedoch gesünder für den Server und auf lange Sicht auch das Beste für Ihre Website.

Sie können diesen Block in /etc/httpd/conf/httpd.conf oder /etc/apache2/apache2.conf platzieren, je nachdem, ob Sie CentOS oder Debian verwenden.

Bitte beachten Sie, dass das gleiche Prinzip für alle MPMs gilt – ich verwende hier „event“, um mit dem im vorherigen Tipp beschriebenen Konzept fortzufahren:

<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
</IfModule>

In jedem Fall wird dringend empfohlen, in den Apache 2.4-Dokumenten nachzusehen, welche Anweisungen für das von Ihnen gewählte MPM zulässig sind.

TIPP #5: Machen Sie sich mit Ihren Anwendungen vertraut

Als Faustregel gilt, dass Sie keine Apache-Module laden sollten, die für die Funktion Ihrer Anwendung nicht unbedingt erforderlich sind. Dies erfordert mindestens umfassende Kenntnisse der auf Ihrem Server ausgeführten Anwendungen, insbesondere wenn Sie Systemadministrator sind und ein anderes Team für die Entwicklung verantwortlich ist.

Sie können die aktuell geladenen Module auflisten mit:

httpd -M          [On RedHat/CentOS based systems]
apache2ctl -M     [On Debian/Ubuntu based systems]

Um Module in CentOS zu entladen/deaktivieren, müssen Sie die Zeile, die mit LoadModule beginnt, auskommentieren (entweder in der Hauptkonfigurationsdatei oder in einer Hilfskonfigurationsdatei innerhalb von ). /etc/httpd/conf.modules.d.

Andererseits stellt Debian ein Tool namens a2dismod zum Deaktivieren von Modulen bereit und wird wie folgt verwendet:

a2dismod module_name

Um es wieder zu aktivieren:

a2enmod module_name

Denken Sie in jedem Fall daran, Apache neu zu starten, damit die Änderungen wirksam werden.

Zusammenfassung

In diesem Artikel haben wir 5 Tipps besprochen, die Ihnen dabei helfen, den Apache-Webserver zu optimieren und seine Leistung zu steigern. Darüber hinaus sollten Sie bedenken, dass Optimierung und Leistung ohne Sicherheit sinnlos sind. Lesen Sie daher möglicherweise auch den Artikel „Installieren Sie mod_pagespeed zur Verbesserung der Webserverleistung“ und „Apache-Härtungstipps“ auf linux-console.net.

Da wir in diesem Artikel nicht alle Aspekte dieses Themas ausreichend behandeln können, fallen Ihnen vielleicht weitere Ideen ein, die Sie gerne mit dem Rest der Community teilen möchten. Wenn ja, teilen Sie uns dies gerne über das Kommentarformular unten mit.