In jeder Standardinstallation von Apache 2 ist keepAlive deaktiviert. Bei einem anderen Server wurde jedoch das keepAlive-Modul aktiviert.
Woher weiß ich, ob keepAlive für mich geeignet ist? Wo finde ich einige gute Beispiele zur Konfiguration?
In jeder Standardinstallation von Apache 2 ist keepAlive deaktiviert. Bei einem anderen Server wurde jedoch das keepAlive-Modul aktiviert.
Woher weiß ich, ob keepAlive für mich geeignet ist? Wo finde ich einige gute Beispiele zur Konfiguration?
Antworten:
Es gibt bereits 2 gute Antworten, aber das vielleicht wichtigste Problem im wirklichen Leben ist noch nicht erwähnt.
Zunächst möchte das OP vielleicht die beiden vorhergehenden Antworten und diesen kleinen Blog-Beitrag lesen, um zu verstehen, was Keepalives sind. (Der Autor geht nicht näher auf die Frage ein, ob TCPI / IP "schneller" wird, je länger die Verbindung geöffnet ist. Langlebige Verbindungen profitieren zwar von der Skalierung des IP-Fensters , der Effekt ist jedoch nur dann signifikant, wenn die Dateien geöffnet sind groß, oder das Bandbreitenverzögerungsprodukt ist ungewöhnlich groß.)
Das große Argument gegen HTTP Keepalive bei der Verwendung von Apache ist, dass es Apache-Prozesse blockiert. Das heißt, ein Client, der keepalives verwendet, verhindert, dass sein Apache-Prozess andere Clients bedient, bis der Client die Verbindung schließt oder das Timeout erreicht ist. Im gleichen Zeitraum hätte diese Apache-Instanz viele andere Verbindungen bedienen können.
Eine sehr verbreitete Apache-Konfiguration ist der Prefork MPM und ein PHP / Perl / Python-Interpreter sowie der Anwendungscode in der genannten Sprache. In diesem Fall ist jeder Apache-Prozess "schwer" in dem Sinne, dass er mehrere Megabyte RAM belegt (Apache, verbunden mit Interpreter und Anwendungscode). Dies ist zusammen mit dem Blockieren jeder Apache-Instanz mit Keepalive ineffizient.
Eine übliche Problemumgehung besteht darin, zwei Apache-Server (beide auf demselben physischen Server oder auf zwei Servern, je nach Bedarf) mit unterschiedlichen Konfigurationen zu verwenden:
Sie können diese Trennung von dynamischen und statischen Inhalten dann bei Bedarf erweitern , beispielsweise durch:
Ein weiterer Ansatz zur Vermeidung des Blockierens von Apache besteht in der Verwendung eines Lastenausgleichs mit einer intelligenteren Verbindungsbehandlung, z. B. Perlbal .
.. und vieles mehr. :-)
Keepalives können in einigen Fällen gut sein, in anderen sehr schlecht. Sie reduzieren die Zeit und den Aufwand für das Einrichten einer neuen Verbindung, binden jedoch Serverressourcen für die Dauer des Keepalive-Timeouts. Beispiele:
Wie Sie sehen, spielt KeepAliveTimeout auch eine wichtige Rolle bei der Optimierung der Serverleistung.
Schauen Sie sich Ihr Nutzungsmuster an und entscheiden Sie selbst.
Sie sollten auf jeden Fall KeepAlive On verwenden.
Sehen:
http://httpd.apache.org/docs/2.0/mod/core.html#keepalive
Auf diese Weise wird eine einzelne TCP-Verbindung vom Browser zum Senden mehrerer Abfragen wiederverwendet. Normalerweise besteht eine Website aus vielen Komponenten (HTML-Seite, Javascript-Code, Bilder). Solange sich diese Ressourcen in derselben Domäne befinden und daher von demselben Server bedient werden können, erhöht eine KeepAlive-Verbindung die Leistung erheblich, da der Browser keine neue TCP-Verbindung herstellen muss.
Ein Browser öffnet normalerweise drei parallele Verbindungen zu einer Domain. Angenommen, Ihre Site enthält 18 Objekte. Der Browser öffnet 3 Verbindungen und lädt in jeder Verbindung 6 Objekte herunter - im KeepAlive-Modus. Ohne KeepAlive müsste es 18 TCP-Verbindungen öffnen, was sehr langsam ist.
Die meisten oder alle modernen Browser sind HTTP / 1.1-kompatibel, dies sollte also funktionieren.
Bestimmte HTTP-Proxys wie Squid sind nicht HTTP / 1.1-kompatibel, erfordern jedoch die Verwendung einer KeepAlive-Verbindung.