Wie lange bleiben Apache-Prozesse am Leben?

9

Wie lange bleibt Apache am Leben, wenn es einen Prozess für Mod-PHP gibt? Stirbt der Prozess ab, sobald die Antwort gesendet wird, oder bleibt er am Leben, bis der Browser die vollständige Antwort erhält?

Jamie Clinton
quelle

Antworten:

9

Wenn Sie mod-php verwenden, verwenden Sie wahrscheinlich das preforkMPM, das untergeordnete Prozesse erzeugt, um Anforderungen zu verarbeiten. Die Anzahl und Lebensdauer dieser Kinder gemäß den Anweisungen in Ihrer Hauptdatei apache2.conf(oder httpd.conf, abhängig von Ihrer Distribution).

Suchen Sie nach dem Teil, der so aussieht (Ihre Werte können variieren):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Apache erzeugt StartServersautomatisch Kinder. Diese Prozesse werden im Leerlauf ausgeführt, bis eine Anforderung eingeht. Wenn Kinder beschäftigt sind, werden sie von MaxClientsKindern erzeugt, um die Last zu bewältigen, und versuchen, MinSpareServersinaktive Kinder zu verwalten, um neue Anforderungen aufzunehmen. Sobald sich die Dinge beruhigt haben, werden müßige Kinder getötet, bis die Anzahl erreicht ist MaxSpareServers.

Das Bit, nach dem Sie fragen, wird von bearbeitet MaxRequestsPerChild. Auf 0 gesetzt bedeutet dies, dass Kinder für immer leben können. Dies ist der Standardwert in den meisten Apache-Installationen. Bei allen anderen Einstellungen bedeutet dies, dass jeder untergeordnete Prozess unabhängig von der aktuellen Last zwangsweise beendet und neu gestartet wird, sobald diese Anzahl von Anforderungen verarbeitet wurde.

Weitere Details zum Prefork MPM finden Sie hier: http://httpd.apache.org/docs/2.2/mod/prefork.html

SmallClanger
quelle
Danke, das gibt mir ein besseres Verständnis von Apache. Meine spezielle Frage lautet: Was macht der untergeordnete Prozess, wenn die Antwort an den Client zurückgesendet wird? Ist es inaktiv und wartet darauf, dass der Client es bestätigt, oder kann es eine neue Anfrage sofort bearbeiten?
Jamie Clinton
Sobald eine Antwort gesendet wurde und der Client sie bestätigt, bleibt die TCP-Verbindung standardmäßig weitere 15 Sekunden (glaube ich) geöffnet. Während dieser Zeit erhält das Kind als erstes weitere HTTP-Anforderungen von demselben Client. Wenn keine empfangen werden, wird die TCP-Verbindung geschlossen und das Kind wird gemäß den obigen Regeln behandelt. Normalerweise bleibt es am Leben und geht zurück in den Leerlaufpool. Dieses Verhalten kann sowohl vom Client als auch vom Server geändert werden. (Es kann zum Beispiel vorzuziehen sein, die Verbindung sofort zu schließen)
SmallClanger
Wenn Sie es noch nicht verwendet haben, ist wireshark.org ein großartiges Tool zur Analyse des Datenverkehrs zwischen Client und Server. Sie erhalten einen umfassenden Einblick in das Geschehen unter der Haube.
SmallClanger
4

httpd gibt keinen Prozess für mod_php auf. Es gibt einen Prozess für sich heraus, in den mod_php eingebettet ist. Das Kind wird am Leben bleiben , bis sie erfüllt hat MaxRequestsPerChildAnfragen. mod_php selbst verarbeitet jede Anforderung für ein PHP-Skript so lange, bis entweder das Skript beendet wird oder das Zeitlimit überschritten wird.

Ignacio Vazquez-Abrams
quelle