Apache-Verbindung vs. Anforderung

Apache-Verbindung vs. Anforderung

Ich entschuldige mich im Voraus, wenn dies eine grundlegende Frage ist, aber ich bin ziemlich verwirrt, nachdem ich die Apache-Dokumentation und andere Tutorials gelesen habe.

Bedient ein einzelner Apache-Prefork-Prozess alle HTTP-Anfragen für einen bestimmten Client? Das dachte ich mir, aber wenn ich die maxclients auf eine niedrige Zahl reduziere, verlangsamen sich meine Seitenladezeiten. Und das, obwohl ich der einzige Client auf dem betreffenden Server bin. Das würde bedeuten, dass jeder Prozess jeweils nur eine HTTP-Anfrage bedient, anstatt alle Anfragen innerhalb des TimeOut-Fensters zu bedienen.

Wenn also zum vollständigen Laden einer einzelnen Webseite 15 HTTP-Anfragen erforderlich sind, benötige ich dann 15 Prefork-Apache-Prozesse, um sie optimal bereitzustellen?

Antwort1

Bei unserer üblichen Betrachtungsweise des HTTP-Protokolls sollte dies kein Problem darstellen.

Moderne Browser verwendenbleib am LebenVerbindungen, die jeweils nur eine Anforderung übertragen können. In diesem Sinne MaxClients 1sollte die Verwendung keine Auswirkungen haben, da jede Anforderung in diesen Verbindungen abgeschlossen wird, bevor die nächste gestartet wird.

Das ist jedoch eine andere Sache bei modernen Browsern: Sie verwenden mehrere Verbindungen. Heutzutage erhalten Sie möglicherweise eine HTML-Seite, die das Laden von 40 anderen Ressourcen erfordert: Bilder, JavaScript, CSS. Aus Effizienzgründen macht es wenig Sinn, sie alle in einer einzigen Datei zu stapeln, um sie über eine Verbindung zu senden. Stattdessen werden sie auf eine Handvoll Verbindungen aufgeteilt (von denen jede immer noch eine einzelne Datei ist), um sie gleichzeitig abzurufen.

Ich kann keine gute, maßgebliche Quelle für Informationen zum Verhalten der einzelnen Browser finden, aberwas ich finden kannlegt nahe, dass 6 Verbindungen ungefähr normal sind. Hier kommt die Parallelität Ihres Servers ins Spiel; jede dieser 6 Verbindungen kann gleichzeitig eine Ressource anfordern und fungiert aus Sicht des Servers als 6 verschiedene Clients.

Antwort2

mpm_preforkantwortet nur auf eine Verbindung. Wenn Apache mehr als eine Verbindung pro Prozess bedienen soll, müssen Sie ein Multithread-MPM wie verwenden mpm_worker.

Moderne Browser verwenden Pipelines (mehrere gleichzeitige Verbindungen) und Keep-Alive (serialisierte Anfragen über dieselbe Verbindung), um den Durchsatz und die Netzwerkeffizienz zu erhöhen und die Latenz zu verringern. Beispielsweise kann Mozilla Firefox konfiguriert werden, indem network.http.pipeliningund network.http.pipelining.maxrequestsin geändert werden.about:config

verwandte Informationen