GNU/Linux >> LINUX-Kenntnisse >  >> Linux

MPM Prefork, zu viele Apache2-Prozesse?

Lösung 1:

Ich habe Ihnen die Antwort darauf in den Kommentaren über Server gegeben, der nicht auf SSH und HTTP reagiert, aber Ping funktioniert, aber anscheinend glauben Sie mir nicht. Wirklich, es ist wahr!

Sie müssen die Größe MaxClients haben / ServerLimit zu Ihrem System. Die von Ihnen erwähnten "5-10 Einstellungen für Min/Max-Server" sind im Grunde irrelevant - das ist nur die Anzahl der zusätzlichen Server, die herumhängen und nichts tun, was Apache behalten wird.

Um MaxClients entsprechend einzustellen, sehen Sie sich die typische High-Water-Mark für Ihre httpd an (oder apache2 ) verarbeitet, und teilen Sie dann Ihren verfügbaren Speicher durch diesen. Am besten etwas nach unten fallen lassen, um dem Rest des Systems Raum zum Atmen zu geben. Da Sie 4 GB RAM und 185 MB Prozesse haben, bedeutet das Ihre ServerLimit Wert sollte höchstens 21 sein – wahrscheinlich 20 oder 19.

Nun, es kann sein, dass 190 MB untypisch sind. Sie können das ServerLimit höher einstellen, basierend auf einer anderen Schätzung der typischen Nutzung, aber dann setzen Sie im Grunde darauf, dass Sie niemals eine Spitze haben werden. Wenn dies passiert, wird Ihr System nicht genügend Arbeitsspeicher haben.

Wenn Sie einen Weg finden, die Speichernutzung pro Worker einzuschränken, ist das ein Gewinn. Ich wette, das ist ein Fall von PHP Ate My RAM. Können Sie Ihre App so codieren, dass sie in einem niedrigeren memory_limit lebt ? Wenn Sie das nicht können, benötigen Sie ein anderes Modell, unter dem Sie Ihr PHP ausführen können. Wenn dies nicht möglich ist, müssen Sie mehr RAM kaufen.

Lösung 2:

Apaches Prefork MPM verwaltet Server selbst. Es beginnt immer mit StartServers Daemons und wird nie weniger als MinSpareServers ausführen sobald es los geht. Es wird auch Server mit mehr als MaxSpareServers stilllegen/killen wenn sie lange genug untätig sind (ich erinnere mich nicht, was "Long Enough" in diesem Zusammenhang ist, noch ob/wie es geändert werden kann).

ServerLimit legt die maximale Anzahl von Apache-Daemons fest, die zu einem bestimmten Zeitpunkt ausgeführt werden können -- Aus diesem Grund können Sie in Ihrer Situation Hunderte von schlafenden Apache-Prozessen haben (sie wurden erstellt, um eine Flut von Anforderungen zu bedienen, und waren nicht lange genug inaktiv, um dies zu tun noch nicht vom Mutterprozess getötet werden).

Ich persönlich denke, dass 1250 ein ziemlich hoher Wert für ServerLimit ist /MaxClients -- 250 kann eine vernünftigere Zahl sein (obwohl dies zu dem gelegentlichen 503/Server Busy-Fehler führen kann, wenn Sie eine massive Flut von Anfragen erhalten:Wenn dies zu einem chronischen Problem wird, können Sie die Zahl erhöhen oder weitere Server hinzufügen, um die Last zu bewältigen ).

Wenn Sie diese Frage mit Ihrer vorherigen Re:a out-of-memory crash in Beziehung setzen, befolgen Sie auf jeden Fall die Anweisungen aus dem Apache-Handbuch zu diesem Parameter:

Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.

…und mein persönliches Axiom:It's better to give a client a 503 page than knock the server down . :)

Lösung 3:

Deaktivieren Sie Keepalives und setzen Sie MaxClients auf 150. Der wahrscheinlichste Grund dafür, dass 260 Prozesse einfach da sitzen, ist, dass Apache Browserverbindungen pflichtgemäß offen hält, weil KeepAlive in Ihrer Apache-Konfigurationsdatei aktiviert ist.


Linux
  1. Beheben des MySQL-Fehlers:Zu viele offene Dateien

  2. Installieren Sie Apache Cassandra auf Ubuntu 20.04 - Schritt für Schritt?

  3. Installieren Sie Apache auf Ubuntu 18.04 - Schritt für Schritt?

  4. Installieren Sie Apache Maven auf Ubuntu 20.04 - Schritt für Schritt?

  5. Installieren Sie Apache Web Server auf CentOS 8 - Schritt für Schritt, um es zu tun?

Apache-Befehle, die Sie kennen sollten

Fehlerbehebung:Zu viele Weiterleitungen

So installieren Sie den Apache-Webserver unter Ubuntu 20.04

Wie kann ich feststellen, ob Apache auf einem System installiert ist?

s3cmd schlägt zu oft fehl

Zu viele offene Dateien auf Debian