Frage Wie verhindere ich das Einfrieren von Linux bei zu wenig Arbeitsspeicher?


Heute habe ich (zufällig) ein Programm auf meiner Linux-Box ausgeführt, das schnell viel Speicher benötigte. Mein System erstarrte, reagierte nicht mehr und so konnte ich den Täter nicht töten.

Wie kann ich das in Zukunft verhindern? Kann es nicht wenigstens einen responsiven Kern oder etwas Laufen lassen?


19
2018-05-19 10:38


Ursprung


Duplikat von Das System hängt, wenn der Arbeitsspeicher knapp wirdund es ist sehr bekannt Fehler - Dan Dascalescu


Antworten:


Ich wette, dass das System nicht wirklich "eingefroren" ist (in dem Sinne, dass der Kernel hängt), sondern eher sehr unempfänglich ist. Es ist wahrscheinlich, dass es nur sehr schwer ausgetauscht wurde, was dazu führte, dass die interaktive Leistung und der Systemdurchsatz wie ein Stein fielen.

Sie könnte swap ausschalten, aber das ändert nur das Problem von schlechter Leistung zu OOM-getöteten Prozessen (und all dem Spaß, der das verursacht), zusammen mit verringerter Leistung aufgrund weniger verfügbarem Platten-Cache.

Alternativ können Sie Ressourcengrenzen pro Prozess verwenden (im Allgemeinen als bezeichnet) rlimit und / oder ulimit) um die Möglichkeit zu beseitigen, dass ein einzelner Prozess eine lächerliche Menge an Speicher verbraucht und einen Austausch verursacht, aber das bringt dich nur in unterhaltsames Territorium mit Prozessen, die in unbequemen Momenten sterben, weil sie etwas mehr Speicher wollen, als das System ihnen geben wollte.

Wenn du wusstest, dass du etwas tun würdest, das wahrscheinlich einen massiven Speicherverbrauch verursachen würde, könntest du wahrscheinlich ein Wrapper-Programm schreiben, das einen mlockall() und dann deine Schale ausführen; das würde es im Speicher behalten und wäre am ehesten dem "behaltet einen reaktiven Kern", den Sie wahrscheinlich erhalten werden (weil es nicht das Problem ist, dass die CPU überlastet wird).

Persönlich abonniere ich die "Do not doof things" Methode der Ressourcenkontrolle. Wenn Sie root haben, können Sie einem System alle möglichen Schäden zufügen etwas dass Sie die wahrscheinlichen Ergebnisse nicht wissen, ist ein riskantes Geschäft.


13
2018-05-19 10:54



Leider "tun dumme Sachen nicht" Benutzern nicht, die Speicher-hogging Anwendungen wie Chrom laufen lassen (sehen Sie Probleme 134612, 393395). - Dan Dascalescu


Wie bereits im Kommentar von Tronic erwähnt, ist es möglich, OOM-Killer (out of memory killer) direkt über die Tastaturkombination aufzurufen SysRq-F.

SysRq Schlüssel wird normalerweise innerhalb kombiniert PrtSc Taste auf Tastaturen.

OOM-Killer tötet einige Prozesse (-e) und das System reagiert wieder. Direkter Zugriff auf OOM-Killer ist möglicherweise nicht standardmäßig aktiviert, plz checkout diese Frage um herauszufinden, wie man seinen Status überprüft und / oder aktiviert.

PS: Das hat mir sehr geholfen. Ich stimme der Meinung zu, dass dies der nützlichste Hinweis auf dieses Problem ist, wenn es von Chrome oder einer anderen gierigen Speicher-Software verursacht wird. Aber Sie müssen bedenken, dass OOM-Killer einen wirklich wichtigen Prozess töten könnte, verwenden Sie ihn sorgfältig.


6
2018-03-30 14:00





Dies ist ein seit 2007 bekannter Fehler - siehe System friert bei hoher Speicherbelegung ein.

In diesem Fall zeigt Windows einen Dialog an, in dem der Benutzer aufgefordert wird, eine oder mehrere Anwendungen zu schließen.


1
2018-06-15 15:31





Wenn Sie den Kernel neu kompilieren möchten, können Sie das versuchen patch von dem EDIT Abschnitt dieser Frage: https://stackoverflow.com/q/52067753/10239615
Es vertreibt nicht die Active(file) Bei hohem Speicherdruck kann der OOM-Killer fast augenblicklich ausgelöst werden, da der Kernel nicht mehr ständig mehrere Minuten auf der Festplatte für das erneute Lesen der ausführbaren Codeseiten eines Prozesses benötigt, was ein eingefrorenes Betriebssystem verursacht.


0
2017-08-31 09:58





Dies ist besonders schwierig zu verhindern. Das liegt daran, dass der Kernel mit dem Swapping beginnt. Eine Lösung besteht darin, den Swap auszuschalten. Wenn das System nicht genügend Arbeitsspeicher zur Verfügung hat, wird der Kernel einige Prozesse abbrechen, anstatt mit dem Swapping zu beginnen. normalerweise nimmt es den richtigen Prozess auf, um zu töten, aber es ist sowieso besser, einen zufälligen Prozess zu töten, als ein nicht reagierendes System zu haben.

Dies kann eine besonders gute Lösung für Server sein, da Server oft genug RAM haben und wenn sie beginnen, Swap-Space zu nutzen, bedeutet das, dass irgendetwas nicht stimmt. In der Regel benötigen Desktops jedoch Swap-Speicher. Daher ist es meiner Meinung nach keine gute Lösung für Desktops. Ich wechsle oft den Swap-Platz in Servern aus, besonders wenn der Verdacht auf ein Speicherleck besteht.


-1
2018-05-19 10:52



Das Deaktivieren von Swap auf jedem System ist eine schlechte Idee, weil es die nicht verwendeten Seiten nicht auswechselt und den freien Speicherplatz für den Datenträger-Cache verwendet. Das ist insbesondere True, wenn ein Speicherleck vorliegt. - womble♦
Und mit Swap-Off kann das System aufgrund von Paging immer noch langsam werden. Es wird nur sauber Seiten pausieren statt schmutzigen. (Da es ohne Tausch niemals eine schmutzige Seite vertreiben kann, muss es immer saubere löschen.) - David Schwartz
Ich habe einen Server, der ein Speicherleck hat. Beim ersten Mal musste ich den Reset-Knopf drücken, weil der Server nicht mehr reagierte. Aber jetzt, da ich den Swap ausgeschaltet habe, tötet der Server nur das Apache-Kind, wenn es zu groß wird (es ist eine Sicherheitsmaßnahme zusätzlich zu MaxRequestsPerChild). Das Ergebnis ist, dass der Server ohne Probleme läuft. Es hat sowieso nicht viele ungenutzte Seiten, und es ist sicherlich nicht blättern sauber Seiten. - Antonis Christofides
@AntonisChristofides: Ich bin mir nicht sicher, was du davon denkst Ihre Lösung ist sicherlich eine schlechte Lösung, da sie die Leistung beeinträchtigt, da selten genutzte schmutzige Seiten nicht aus dem physischen Speicher gelöscht werden können. Das zugrundeliegende Problem wurde dadurch nicht gelöst und Sie riskieren, dass der OOM-Killer einen kritischen Prozess beendet. Sie sind zufällig nicht auf das besondere Risiko gestoßen, vor dem ich gewarnt habe, aber Sie sind immer noch gefährdet, weil Sie keinen Tausch haben. - David Schwartz
Mit oder ohne Tausch friert es immer noch ein, bevor der OOM Killer automatisch ausgeführt wird. Dies ist wirklich ein Kernel-Fehler, der behoben werden sollte (d. H. Früher OOM-Killer ausführen, bevor der gesamte Festplatten-Cache gelöscht wurde). Leider sehen Kernel-Entwickler und viele andere Leute das Problem nicht. Allgemeine Vorschläge wie das Deaktivieren / Aktivieren von Swap, das Kaufen von mehr RAM, das Ausführen weniger Prozesse, das Setzen von Limits usw. behandeln nicht das zugrunde liegende Problem, dass die geringe Speicherverwaltung des Kernels Kamels Bälle saugt. Unterdessen empfehle ich, den OOM-Killer manuell zu starten (SysRq-F), wenn das System friert, da es schneller wiederhergestellt werden kann. - Tronic