Frage Sollte ich keepAlive in Apache2 aktivieren?


Bei jeder Standardinstallation wird Apache 2 mit "keepAlive" ausgeschaltet, aber bei einem anderen Server wurde das keepAlive-Modul aktiviert.

Also, woher weiß ich, ob KeepAlive für mich richtig ist? Wo kann ich einige gute Beispiele finden, um dies zu konfigurieren?


23
2017-10-12 21:55


Ursprung




Antworten:


Es gibt schon 2 gute Antworten, aber die vielleicht wichtigste Frage des wirklichen Lebens ist noch nicht erwähnt.

Zunächst einmal möchte das OP die 2 vorhergehenden Antworten lesen und dieser kleine Blogpost um zu verstehen, was Keepalives sind. (Der Autor geht nicht näher darauf ein, dass TCPI / IP umso "schneller" wird, je länger die Verbindung offen ist. Es ist wahr, dass länger dauernde Verbindungen davon profitieren IP-Fensterskalierung, aber der Effekt ist nicht signifikant, es sei denn, die Dateien sind groß oder das Produkt mit Bandbreitenverzögerung ist ungewöhnlich groß.

Das große Argument gegen HTTP Keepalive bei der Verwendung von Apache ist, dass es Apache-Prozesse blockiert. I.e. Ein Client, der Keepalives verwendet, verhindert, dass sein Apache-Prozess andere Clients bedient, bis der Client die Verbindung schließt oder das Zeitlimit erreicht wird. In der gleichen Zeitspanne könnte diese Apache-Instanz viele andere Verbindungen bedient haben.

Nun ist eine sehr häufige Apache-Konfiguration die Prefork-MPM und einen PHP / Perl / Python-Interpreter und Anwendungscode in der erwähnten Sprache. In diesem Fall ist jeder Apache-Prozess "schwer" in dem Sinne, dass er mehrere Megabyte RAM belegt (Apache ist mit Interpreter und Anwendungscode verknüpft). Dies ist zusammen mit dem Blockieren jeder Keepalive-Apache-Instanz ineffizient.

Eine häufige Problemumgehung Verwenden Sie 2 Apache-Server (je nach Bedarf auf demselben physischen Server oder auf 2 Servern) mit unterschiedlichen Konfigurationen:

  • ein "heavy" mit mod_php (oder welcher Programmiersprache auch immer verwendet wird) für dynamischen Inhalt, mit Keepalives aus.
  • ein "leichtgewichtiges" mit einem minimalen Satz von Modulen, um statische Inhalte (Bild, CSS, JS usw.) zu bedienen, mit Keepalives auf.

Sie können dann diese Trennung von dynamischem und statischem Inhalt erweitern wenn gebrauchtzum Beispiel durch:

  • Verwenden eines ereignisgesteuerten Servers für statischen Inhalt, wie z nginx.
  • Verwenden eines CDN für statischen Inhalt (könnte den gesamten statischen Inhalt für Sie bereitstellen)
  • Implementieren des Caching von statischen und / oder dynamischen Inhalten

Ein weiterer Ansatz, Apache nicht zu blockieren ist ein Load Balancer mit intelligenter Verbindungsbehandlung, wie z Perlbal.

.. und vieles mehr. :-)


30
2017-11-01 18:45



Sind diese Antworten noch 8 Jahre später relevant? - TheStoryCoder


Keepalives können in einigen Fällen gut sein, in anderen können sie sehr schlecht sein. Sie reduzieren die Zeit und den Aufwand beim Einrichten einer neuen Verbindung, binden jedoch Serverressourcen für die Dauer des Keepalive-Timeouts. Beispiele:

  • Seiten mit vielen kleinen Objekten, Clients beim Einwählen - keepalive sollte eingeschaltet sein.
  • Seiten mit ein paar großen Objekten - Keepalive wird kein Vorteil sein.
  • Server mit einer sehr hohen Anzahl von eindeutigen Besuchern - Keepalive sollte ausgeschaltet sein (andernfalls werden Sockets und Threads im Speicher sitzen und auf das Keepalive-Timeout warten und keine neuen Clients bedienen).

Wie Sie sehen können, wird KeepAliveTimeout auch eine große Rolle bei der Optimierung der Serverleistung spielen.

Schau dir dein Nutzungsverhalten an und entscheide selbst.


5
2017-10-15 02:51





Sie sollten KeepAlive On unbedingt verwenden.

Sehen:

http://httpd.apache.org/docs/2.0/mod/core.html#keepalive

Auf diese Weise wird eine einzelne TCP-Verbindung vom Browser wiederverwendet, um mehrere Abfragen zu senden. Normalerweise hat eine Website viele Komponenten (HTML-Seite, Javascript-Code, Bilder). Solange sich diese Ressourcen in derselben Domäne befinden und daher vom selben Server bedient werden können, führt eine KeepAlive-Verbindung zu einer enormen Leistungssteigerung, da der Browser keine neue TCP-Verbindung herstellen muss.

Ein Browser öffnet normalerweise drei parallele Verbindungen zu einer Domäne. Angenommen, Sie haben 18 Objekte auf Ihrer Website. Der Browser würde 3 Verbindungen öffnen und 6 Objekte in jeder Verbindung herunterladen - mit dem 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-konform, also sollte dies einfach funktionieren.

Bestimmte HTTP-Proxies wie Squid sind nicht HTTP / 1.1-konform, aber sie fordern trotzdem die Verwendung einer KeepAlive-Verbindung an.


0
2017-10-15 02:34



Dies ist nur von der clientseitigen Betrachtung, während ich denke, dass serverseitige Ressourcennutzung ebenfalls wichtig ist. - Morgan Cheng
Die serverseitige Ressourcennutzung ist wichtiger als die vom Benutzer wahrgenommene Latenz? - Yves Junqueira
Ich glaube auch, KeepAlive einschalten zu können, aber Apaches Standard-Timeout von 15 Sekunden ist viel zu großzügig, da Prozesse zu lange blockiert werden. Normalerweise setze ich das Timeout auf ungefähr 2 Sekunden, was dazu führt, dass KeepAlive während eines Seitenladevorgangs verwendet wird. - Martijn Heemels