Kann der OOM-Killer früher eingreifen?

34

Ich versuche mein Entwicklungssystem auf maximale Zuverlässigkeit zu optimieren. Ich habe Swap deaktiviert, weil es für die GUI-Nutzung meistens dazu führt, dass der Computer nicht mehr reagiert und nicht mehr verwendet werden kann. Wenn aggressive Anwendungen das Gedächtnis auffressen, scheinen einige Mechanismen dafür zu sorgen, dass die Geschwindigkeitskosten optimal genutzt werden. Es gibt keine Festplattenwechseloperation, aber das System reagiert ebenfalls nicht mehr. Deshalb möchte ich den OOM-Killer einschalten lassen, bevor das System besondere Anstrengungen unternimmt, um Speicherplatz zu gewinnen. Ist es möglich, den OOM-Killer für Aktionen zu konfigurieren, wenn beispielsweise weniger als 100 MB physischer Speicher frei sind?

Dronus
quelle
2
Ich denke, das eigentliche Problem hier ist, dass es nicht genug RAM gibt, um damit zu beginnen. Sie werden Swap nur verwenden, wenn kein RAM vorhanden ist. Wenn Sie Swap ausschalten, hat der RAM keinen Platz mehr. Was dazu führt, dass hässliche Dinge passieren. Ihr System ist anscheinend schlecht eingerichtet, und das lässt sich durch keine Änderung beheben.
Geselle Geek
8
Ich stimme nicht zu. Entwicklung und 'Stromverbrauch' beinhalten oft experimentellen Gebrauch. Wenn Sie beispielsweise ein Befehlszeilen-Bildverarbeitungstool verwenden, gibt es keine Angabe darüber, wie viel Arbeitsspeicher die Operation im Verhältnis zur Bildgröße beansprucht. Also probiere ich es einfach aus. Und ich erwarte nicht, dass es meine ganze Maschine unbrauchbar macht. Für ein einzelnes Experiment könnte ich ulimit verwenden, um es sicher zu halten, aber für den gesamten Systembetrieb mit manchmal vielen Vorgängen ist die Eindämmung eines Prozesses nicht so nützlich, sondern eine "Lebensversicherung" für die gesamte Maschine definitiv.
Dronus
1
Die Tatsache, dass Ihr System beim Verwenden von Swap zum Stillstand kommt, ist verdächtig. Ihr Computer verwendet Swap, da nicht genügend Arbeitsspeicher vorhanden ist. Swap verlangsamt sich, weil der Festplattenzugriff langsam ist. Datenträgerzugriff ist wegen ??? langsam. Es sind die ganzen Probleme. Es ist nicht nur so, dass Sie wenig RAM haben. Es ist so, dass Sie die eine Möglichkeit nicht nutzen können, um das aufgrund von etwas anderem zu verhindern.
Geselle Geek
7
@JourneymanGeek, du bist im linken Feld. Die Festplatten sind langsamer als der RAM-Zeitraum, daher wird das System durch starkes Austauschen immer zum Stillstand gebracht. Natürlich hat er nicht genügend Arbeitsspeicher, weil er versucht hat, ein Programm auszuführen, das viel Arbeitsspeicher benötigt. Die Frage ist, was zu tun ist, wenn der Speicher voll ist. Töte das Schwein oder verlangsame es, weil kein Speicher mehr für den Festplatten-Cache vorhanden ist.
Psusi
2
@TomWijsman, Datenträger-E / A ist um viele Größenordnungen langsamer als Speicher-E / A, daher bedeutete die Verwendung des Datenträger-Austauschs immer eine enorme Verlangsamung. Manchmal (vor allem in den alten Zeiten, als RAM teuer war und die meisten Leute nicht viel hatten) ist es besser, nicht in der Lage zu sein, das zu tun, was Sie überhaupt versucht haben. In diesen Tagen ist die Scheibe SO viel langsamer als RAM und RAM ist billig genug , dass die meisten Menschen viel haben, also bei der seltenen Gelegenheit , wo sie zufällig etwas laufen , dass Anwendungen mehr RAM , als sie haben, ist es oft besser als nehmen aufgeben 1000 mal so lange es geht.
Psusi

Antworten:

36

Ich hatte auch Probleme damit. Ich möchte nur, dass mein System auf alle Fälle reagiert, und ich ziehe es vor, Prozesse zu verlieren, anstatt ein paar Minuten zu warten. Es scheint keine Möglichkeit zu geben, dies mit dem Kerneloom-Killer zu erreichen.

Im Benutzerbereich können wir jedoch tun, was wir wollen. Also habe ich den Early OOM Daemon ( https://github.com/rfjakob/earlyoom ) geschrieben, der den größten Prozess (per RSS) beendet, sobald der verfügbare RAM unter 10% sinkt .

Ohne Earlyoom war es einfach, meinen Computer (8 GB RAM) durch mehrmaliges Starten von http://www.unrealengine.com/html5/ zu sperren . Jetzt werden die schuldigen Browser-Registerkarten gelöscht, bevor die Dinge außer Kontrolle geraten.

Jakob
quelle
3
Danke, dass du diesen Juckreiz gekratzt hast! Ich liebe Earlyoom so weit.
Thomas Ferris Nicolaisen
1
Gerade herausgefunden, dass Android das gleiche für eine lange Zeit tut. Ich bin nicht sicher, ob es dafür benutzerdefinierten Code wie Ihren verwendet.
Dronus
1
Ich teste earlyoomjetzt, es tut gut in einem ersten Triggertest. Ich frage mich nur, warum dies nicht durch Kernel-Konfiguration oder System-Tools implementiert werden kann.
Dronus
12

Die Standardrichtlinie des Kernels besteht darin, dass Anwendungen weiterhin virtuellen Speicher zuweisen können, solange physischer Speicher frei ist. Der physische Speicher wird erst dann tatsächlich verwendet, wenn die Anwendungen den zugewiesenen virtuellen Speicher berühren. Eine Anwendung kann also viel mehr Speicher zuweisen als das System, um ihn später zu berühren. Dies führt dazu, dass dem Kernel der Speicher ausgeht und der Vorgang ausgelöst wird of memory (OOM) Killer. Bevor der Hogging-Prozess jedoch beendet wird, wurde der Festplatten-Cache geleert, wodurch das System eine Zeitlang nur langsam reagiert, bis sich der Cache wieder füllt.

Sie können die Standardrichtlinie so ändern, dass keine Speicherüberlastung zulässig ist, indem Sie den Wert 2 auf eingeben /proc/sys/vm/overcommit_memory. Der Standardwert /proc/sys/vm/overcommit_ratioist 50, sodass der Kernel es Anwendungen nicht erlaubt, mehr als 50% von RAM + Swap zuzuweisen. Wenn Sie keinen Swap haben, erlaubt der Kernel Anwendungen nicht, mehr als 50% Ihres RAMs zuzuweisen, während die anderen 50% für den Cache frei bleiben. Das kann ein bisschen zu viel sein. Sie können diesen Wert also auf etwa 85% erhöhen, damit Anwendungen bis zu 85% Ihres Arbeitsspeichers zuweisen können und 15% für den Cache übrig bleiben.

Psusi
quelle
1
Das Ändern dieser Werte von den Standardwerten ohne theoretischen Hintergrund wird in einem zuverlässigeren System nicht möglich sein. Sie können diese Änderung nur mit geeigneten Statistiken rechtfertigen. Nur weil Sie es ändern können, heißt das nicht, dass Sie es sollten. Wenn Sie ständig unter schlechten Speicherbedingungen arbeiten und mehr Speicher benötigen als Sie haben und mehr Speicher kaufen sollten, bedeutet dies nicht, dass Sie mit Ihren Einstellungen experimentieren und zufällige Anwendungen beenden sollten. Wenn Sie Ihre tägliche Arbeit unterbrechen oder Korruption einführen, ist dies nicht der
richtige
3
@TomWijsman, die Frage macht deutlich, dass er sich nicht ständig in einem schlechten Arbeitsspeicher befindet. Er führt nur manchmal einen Befehl aus, der unerwartet viel Speicher benötigt. Der Kauf von mehr Speicher ist nicht die einzige Lösung, wenn Sie nicht mehr ausreichen. Andere mögliche Lösungen sind, bessere Möglichkeiten zu finden, um den vorhandenen Speicher zu nutzen, oder einfach nicht zu tun, was so viel Speicher benötigt. Die Frage macht deutlich, dass Letzteres akzeptabler ist als rauszugehen und mehr RAM zu kaufen.
Psusi
Welche Zeile in der Frage macht dies deutlich? Ich sehe das Gegenteil in I disabled swap, because for GUI usage it mostly renders the machine unresponsive in such a way not useable anymore.. Er erwähnte die grafische Benutzeroberfläche, während Sie davon ausgehen, dass er einen Befehl ausführt. Der Kauf von mehr Arbeitsspeicher ist die erste Lösung, der Verbrauch von weniger Arbeitsspeicher die zweite. Wenn Sie Ihr System instabil machen, indem Sie mit den stabilen Standardeinstellungen spielen, ist dies die letzte Lösung. Die Frage muss nicht wörtlich beantwortet werden, daher sehe ich nicht, was Ihr Problem ist, dass Sie uns beide in den Kommentaren belästigen müssen. Rant hilft nicht ...
Tamara Wijsman
4
Hey, diese Antwort klang ziemlich cool. Leider bezieht sich der Begriff "Festschreiben" auf den scheinbaren Bedarf an virtuellem Speicher, der von Anwendungsprogrammierern ziemlich schlecht geschätzt wird. Zum Beispiel mit meinem (ohne Swap) Desktop läuft, gibt es etwa 400 von 2000 MB physikalischen Speicher verwendet, aber 1600 MB ‚commit'ted wie /proc/meminfo‘ s Committed_ASStaaten. Bei einigen laufenden Anwendungen übersteigt dieser Wert leicht den physischen Speicher, so dass es schwierig ist, eine realisierbare Grenze festzulegen.
Dronus
3
Speichern Sie Ihre Arbeit, bevor Sie dies versuchen! : PI hatte sofort Fehler von allem (Bash, Window Manager usw.).
Jozxyqk
8

Für mich macht das Setzen von vm.admin_reserve_kbytes = 262144 genau dies. OOM Killer greift ein, bevor das System nicht mehr reagiert.

Michael Vigovsky
quelle
1
Ich mag die Idee, aber bedeutet das, dass Sie 256 MB physischen Speicher haben, der nie verwendet wurde?
Jérôme Pouiller
1
256 MB werden für Caches verwendet. Caches sind sehr wichtig, es geht nicht nur darum, schneller zu laufen, das System würde überhaupt nicht funktionieren, wenn nicht genügend Speicher für Caches vorhanden wäre. Der Code jedes ausgeführten Programms kann aus dem Speicher entladen werden, da er mmaped ist und von der Festplatte zurückgelesen werden kann. Ohne Caches erfordert jeder Taskwechsel das Lesen der Festplatte und das System reagiert nicht mehr.
Michael Vigovsky
4

Die anderen Antworten haben gute automatische Lösungen, aber ich finde es kann hilfreich sein, den SysRqSchlüssel auch zu aktivieren, wenn die Dinge außer Kontrolle geraten. Mit dem SysRqSchlüssel würden Sie den Kernel manuell übermitteln, und Sie können Dinge wie einen sicheren Neustart (mit SysRQ + REISUB) ausführen, selbst wenn der Userspace vollständig eingefroren ist.

Damit der Kernel Anforderungen abhören kann, kernel.sysrq = 1müssen Sie nur die Funktionen festlegen oder aktivieren, die Sie wahrscheinlich mit einer Bitmaske verwenden ( hier dokumentiert ). Zum Beispiel kernel.sysrq = 244werden alle für den oben genannten sicheren Neustart erforderlichen Combos sowie der manuelle Aufruf des OOM-Killers mit aktiviert SysRq + F.

timuzhti
quelle
-2

Zuverlässigkeit wird nicht durch wenig Arbeitsspeicher und einen OOM-Killer erreicht.

Es ist falsch, eine Party in einem Schrank zu organisieren und "meinen Schrank ausräumen" auf Ihre kleine Wiedergabeliste zu setzen.

Kann der OOM-Killer früher eingreifen?

Dies hat unbeabsichtigte Nebeneffekte zur Folge, da Sie keine Kontrolle darüber haben, was getötet wird.

Ich versuche mein Entwicklungssystem auf maximale Zuverlässigkeit zu optimieren.

Maximale Zuverlässigkeit beinhaltet das Testen Ihres Systems und das Verbessern Ihres Systems basierend auf diesen Tests.

Das bloße Ändern zufälliger Dinge bringt Sie nicht weiter ...

Ich habe Swap deaktiviert, weil es für die GUI-Nutzung meistens dazu führt, dass der Computer nicht mehr reagiert und nicht mehr verwendet werden kann. Wenn aggressive Anwendungen das Gedächtnis auffressen, scheinen einige Mechanismen dafür zu sorgen, dass die Geschwindigkeitskosten optimal genutzt werden.

Aufgrund der niedrigen Speicherbedingungen, wird die Swap - Deaktivierung nicht das Verhalten verbessern , tut es das Gegenteil .

Um die Zuverlässigkeit in dieser Situation zu erhöhen, fügen Sie mehr Speicher hinzu, sodass Ihr System schneller reagiert und keine zufälligen Prozesse ohne die Absicht des Benutzers beendet werden. Sie sollten nicht auf wenig Arbeitsspeicher und einen solchen Mechanismus zurückgreifen, insbesondere nicht in einer Entwicklungsumgebung ...

Es gibt keine Festplattenwechseloperation, aber das System reagiert ebenfalls nicht mehr.

Niedrige Speicherbedingungen führen in der Tat dazu, dass Sie nicht mehr reagieren, egal ob Sie einen Swap haben oder nicht.

Deshalb möchte ich den OOM-Killer einschalten lassen, bevor das System besondere Anstrengungen unternimmt, um Speicherplatz zu gewinnen.

Besondere Anstrengungen, die mehr schaden als nützen, wie ich oben erklärt habe. Stattdessen könnten Sie Prozesse beenden, die Sie selbst nicht benötigen, aber ich schätze, Sie können das nicht tun, damit der OOM die Prozesse beendet, die Sie benötigen.

Ist es möglich, den OOM-Killer für Aktionen zu konfigurieren, wenn beispielsweise weniger als 100 MB physischer Speicher frei sind?

Könnte sein, aber Sie erzielen eine höhere Kapitalrendite, wenn Sie nur zusätzlichen Speicher kaufen, der heutzutage nicht wirklich viel kostet. Bedenken Sie, dass Sie sich auf lange Sicht in den Fuß schlagen werden, wenn Sie weiterhin unter Bedingungen mit geringem Arbeitsspeicher arbeiten. OOM ist wie ein Gerichtsvollzieher, es hilft dir nicht, es hilft dem Betriebssystem ...

Tamara Wijsman
quelle
7
Das Deaktivieren von Swap verbessert natürlich das Verhalten, da der OOM nicht die Festplatte zerschlägt, sondern das Gedächtnisschwein zerstört. Der RAM ist nicht das Problem (und das Hinzufügen von mehr bedeutet, dass Sie sich mehr Mühe geben müssen, um den RAM zu verlieren). Das Problem ist, was zu tun ist, wenn Sie ausgehen. Sie möchten, dass der OOM das Schwein tötet und so den Zustand mit geringem Arbeitsspeicher lindert.
Psusi
7
Weil es vorzuziehen ist, das gesamte System in die Knie zu zwingen, wenn eine Anwendung beendet wird, die mehr Speicher benötigt als Sie. In einer perfekten Welt hätten Sie unbegrenzten Speicher und würden niemals ausgehen, aber in der Realität könnten Sie manchmal aus Versehen ausgehen und es würde Ihnen lieber gesagt, dass "nicht genügend Speicher" vorhanden ist, als dass das System zum Stillstand kommt.
Psusi
5
Der Kauf von zusätzlichem Speicher kann je nach gekaufter Menge einige Probleme lösen. Aber es ändert nichts an der Tatsache, dass es möglicherweise um Größenordnungen unangemessene Verwendungen gibt. Ich möchte also, dass die Anwendung fehlschlägt, aber NICHT das System unter diesen Bedingungen. Einige Beispiele: Verarbeiten Sie einen Ordner mit komprimierten Bildern, von denen die meisten "normal" sind, einige jedoch sehr groß. Ein kleiner Fehler könnte zu einer toten Schleife führen, in der der Speicher 1 GB / s verbraucht. Öffnen Sie versehentlich eine Videodatei in einem Texteditor. Normalerweise endet dies mit Symptomen wie einer ruckelnden Maus und einer fast toten Benutzeroberfläche, bis der OOM einsetzt.
dronus
6
@TomWijsman es gibt auch fast tote Schleifen, da es Algorithmen gibt, die sich im Mittel linear verhalten, im schlimmsten Fall aber exponentiell, abhängig von den Eingabedaten. Und ich kann kein Kill-Signal senden, wenn die Maus ruckelt und Klicks sowie Tastatureingaben eine Latenz von einer Minute aufweisen. Normalerweise wechsle ich dann in einen Textmodus und warte Minuten, bis die Anmeldung abgeschlossen ist, um einen killblind getippten Code auszugeben.
Dronus
7
Ich habe keine Probleme damit, Anwendungen zu beenden, die auch nicht mehr funktionieren würden. Stellen Sie sich ein System mit 2 GB physischem Speicher und 2 GB Swap vor. Eine Anwendung, bei der der physische Speicher schnell aufgebraucht ist, kann den Swap auch problemlos auffressen. Es würde nur später sterben, nachdem das System für Minuten bis Stunden nicht mehr reagiert hat. Warum also nicht schnell töten, bevor die GUI-Bedienung schuppig wird? Viele Prozesse erledigen ihre Arbeit mit 10 MB, einige benötigen 1 GB, und einige benötigen selten 10 GB, das ist das Leben.
Dronus