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.