Wie gebe ich dem OOM-Killer wieder Zähne?

12

Früher habe ich den OOM-Killer verflucht, weil er zu aggressiv war und Apps, die ich benutzte, getötet hat. Jetzt, da ich meinem System regelmäßig 15 Minuten lang zuschaue, weil es sich um ein schlechtes Programm handelt, und dann zum Abschalten übergehe, weil es nicht auf die Tastatur reagiert, merke ich, dass ich es besser hatte, als ich dachte damals.

Wie stelle ich den OOM-Killer auf seine alten, blutrünstigen Weisen wieder her?

Avdi
quelle
1
Werfen Sie einen Blick auf die Programme, die ein Problem verursachen, und begrenzen Sie die Menge an Arbeitsspeicher, mit der sie arbeiten könnenlimits.conf
LawrenceC

Antworten:

4

Ich würde den verfügbaren Swap-Platz verringern. Bei herkömmlichen Installationen wird heutzutage versucht, so viel Swap zuzuweisen, wie physischer Speicher vorhanden ist (oder manchmal doppelt so viel). Das Problem dabei ist , dass , wenn etwas schief geht, geht das System in eine Todesspirale des Versuchs, „shuffle“ Dinge aus dem Speicher auf der Festplatte und zurück, und es beginnt zu tun so viel , dass es keine Zeit zu reagieren zur Benutzereingabe.

In den guten alten Tagen wurden ganze Prozesse auf Festplatte (und zurück) ausgelagert, daher waren große Auslagerungen erforderlich.

In modernen virtuellen Speichersystemen wird der Speicher in Blöcken (und nicht in ganzen Prozessen) ausgelagert, sodass Sie mit kleineren Auslagerungen auskommen können. In Ihrem Szenario ist es besser, Prozesse abbrechen zu lassen. Wenn Sie also mit einem kleineren Swap arbeiten, führt dies dazu, dass OOM Prozesse früher beendet (anstatt dass das System übermäßig viel Zeit mit dem Austauschen von Daten auf die Festplatte verbringt).

Brian Stevens
quelle
Ich habe null Swap und mein System bleibt 20+ Minuten lang hängen, wenn ich eine unendliche Javascript-Schleife in Chrom habe, als auf ein Array oder etwas drückt. Ich muss OOMK auslösen, bevor mein System unbrauchbar ist, und nicht viel später.
JasonWoof
0

Folgendes hat bei mir funktioniert:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Das ist nur für diesen Schuh. Sie können dies testen, indem Sie auf der Konsolenregisterkarte im Inspektor Ihres Browsers Folgendes ausführen:

a = []; while (true) { a.push(1); }

Wenn Sie mit dieser Einstellung zufrieden sind, können Sie die Standardeinstellung für alle zukünftigen Starts festlegen:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
JasonWoof
quelle