Von Zeit zu Zeit kommt "mein" Server zum Stillstand, weil ihm sowohl der Arbeitsspeicher als auch der Auslagerungsspeicher ausgehen. (es reagiert immer wieder auf ping, aber nicht mehr als das, nicht einmal ssh).
Ich habe erfahren, dass Linux eine Überbelegung des Arbeitsspeichers vornimmt, was meines Erachtens dasselbe ist wie bei Banken mit Geld: Es wird mehr Arbeitsspeicher verarbeitet, als tatsächlich verfügbar ist, vorausgesetzt, dass die meisten Prozesse nicht den gesamten von ihnen angeforderten Arbeitsspeicher verwenden Zumindest nicht alle gleichzeitig.
Angenommen, dies ist tatsächlich der Grund, warum mein System gelegentlich aufhängt. Lassen Sie uns hier nicht diskutieren, ob dies der Fall ist oder nicht (siehe Was kann dazu führen, dass ALLE Dienste auf einem Server ausfallen und dennoch auf Ping reagieren? Und wie Sie dies herausfinden ). .
So,
Wie deaktiviere oder reduziere ich die Speicherüberbelegung in CentOS drastisch? Ich habe gelesen, dass es zwei Einstellungen gibt, die vm.overcommit_memory (Werte 0, 1 oder 2) und vm.overcommit_ratiom heißen, aber ich habe keine Ahnung, wo ich sie finden und ändern muss (hoffentlich einige Konfigurationsdateien). Welche Werte sollte ich versuchen? und ob ich den Server neu starten muss, damit die Änderungen wirksam werden.
und ist es sicher? Welche Nebenwirkungen kann ich erwarten? Wenn ich nach overcommit_memory google, finde ich beängstigende Dinge wie Leute, die sagen, dass ihr Server nicht mehr booten kann ...
Da der plötzliche Anstieg der Speichernutzung auf mysql zurückzuführen ist, weil Abfragen von PHP vorgenommen werden, die wiederum aufgerufen werden, während http-Anfragen bearbeitet werden, würde ich davon ausgehen, dass nur ein PHP-Skript nicht vollständig ausgeführt werden kann und daher von Zeit zu Zeit etwa 500 Antworten vorliegen Der Server ist zu beschäftigt, was ein Risiko darstellt, das ich eingehen kann (sicherlich besser, wenn der gesamte Server nicht mehr erreichbar ist und einen harten Neustart durchführen muss).
Oder kann es wirklich dazu führen, dass mein Server nicht neu gestartet werden kann, wenn ich die falschen Einstellungen wähle?
Antworten:
Memory Overcommit kann durch deaktiviert werden
vm.overcommit_memory=2
0 ist der Standardmodus, in dem der Kernel die Zuordnung heuristisch bestimmt, indem er den freien Speicher im Vergleich zu der vorgenommenen Zuordnungsanforderung berechnet. Wenn Sie den Wert auf 1 setzen, wird der Assistentenmodus aktiviert, in dem der Kernel immer mitteilt, dass genügend freier Speicher für eine Zuordnung vorhanden ist. Der Wert 2 bedeutet, dass Prozesse nur bis zu einer konfigurierbaren Menge (
overcommit_ratio
) RAM zuweisen können und Allokationsfehler oder OOM-Meldungen erhalten, wenn diese Menge überschritten wird.Ist es sicher, nein. Ich habe keinen richtigen Anwendungsfall gesehen, bei dem das Deaktivieren der Speicherüberlastung tatsächlich geholfen hat, es sei denn, Sie sind sich zu 100% der Arbeitslast und der Hardwarekapazität sicher. Wenn Sie interessiert sind, installieren Sie das
kernel-docs
Paket und/Documentation/sysctl/vm.txt
lesen Sie mehr oder lesen Sie es online .Wenn Sie dies einstellen
vm.overcommit_memory=2
, wird der Prozentsatz des in konfigurierten physischen Arbeitsspeichers überschrittenvm.overcommit_ratio
(Standard ist 50%).Dies wird einen Neustart nicht überleben. Fügen Sie aus Gründen der Persistenz Folgendes in die
/etc/sysctl.conf
Datei ein:und renne
sysctl -p
. Kein Neustart erforderlich.quelle
Völlig unqualifizierte Aussage: Das Deaktivieren der Speicherüberlastung ist definitiv "sicherer" als das Aktivieren.
$ customer hat es auf ein paar hundert Webservern eingerichtet und bei Stabilitätsproblemen sehr geholfen. Es gibt sogar einen Nagios-Scheck, der lautes Feuer ruft, wenn er jemals NICHT deaktiviert wurde.
Auf der anderen Seite halten es die Leute vielleicht nicht für "sicher", wenn ihre Prozesse aus dem Gedächtnis geraten, wenn sie nur einen kleinen RAM überbeanspruchen möchten und dies nie wirklich nutzen würden. (dh SAP wäre ein sehr gutes Beispiel)
Sie werden also wieder feststellen, ob sich die Situation für Sie verbessert. Da Sie sich bereits damit befassen, um verwandte Probleme zu beseitigen - ich denke, es könnte für Sie hilfreich sein.
(Ich weiß, ich werde ein Downvote von einer mürrischen Person riskieren)
quelle
Ich bin damit einverstanden, dass das Deaktivieren von Overcommit unter bestimmten Umständen sicherer ist als das Aktivieren. Wenn der Server nur wenige große Speicheraufträge ausführt (wie in meinem Fall Schaltkreissimulationen), ist es viel sicherer, der Anwendung die Speicheranforderung im Voraus zu verweigern, als auf ein OOM-Ereignis zu warten (das sicherlich bald folgen wird). Sehr oft sehen wir Server Probleme haben, nachdem der OOM-Killer seine Arbeit getan hat.
quelle