Entkomme dem Tod des OOM-Killers in Linux

1370
Waxhead

Durch ein wenig Recherche habe ich festgestellt, dass es möglich ist, bestimmte Prozesse abzustimmen oder sogar immun zu machen gegen den OOM-Killer, indem ich einen Wert in / proc / pid / oom_adj stecke. Natürlich muss ich pid für meinen Prozess mit pidof oder pgrep oder suchen so etwas und ich mache ein Skript, das ich ausführt, sobald alle meine Prozesse laufen.

Das Problem mit dem OOM-Killer ist wie bei jedem anderen Killer. Auf den ersten Blick mag es vernünftig und rational erscheinen, aber tief im Innern sind sie tatsächlich ernsthaft gestört, ziemlich wahnsinnig und oftmals nicht in der Lage, ein korrektes Urteil zu fällen.

Nun, mir persönlich macht es nichts aus, ein bisschen zu töten, solange ich weiß, was los ist und eine gewisse Kontrolle über die Opfer haben (Leute beruhigen, ich spreche vom Computerzeug), also suche ich nach einem besseren Schutz bestimmte Prozesse gegen den gefürchteten OOM-Killer, so dass ich nicht jedes Mal ein Skript ausführen muss, wenn alle meine Progs laufen oder wenn ich ein neues Programm starte. Irgendwelche Ideen, wie man dies leicht erreichen kann?

6

1 Antwort auf die Frage

6
haimg

Sie sollten sich nicht auf den OOM-Killer verlassen, um Ihre Prozesse zu verwalten. Der OOM-Killer ist ein Maß für den letzten Ausweg, wenn die einzige Alternative ein Systemabsturz ist. Beispielsweise wurde der gesamte Cache- und Plattenpufferspeicher geleert und festgeschrieben, alles, was ausgelagert / verworfen werden kann, wird verarbeitet, und Sie haben immer noch nicht genug Speicher ... Offensichtlich möchten Sie nicht, dass Ihr laufendes System diesen Zustand erreicht.

Aufgrund der strengen Auflagen, unter denen der OOM-Killer arbeitet (kann nicht mehr Speicher zuweisen, kann er nicht in andere Prozesse vertauschen usw.), werden dadurch Prozesse abgebrochen, die Sie nicht beenden möchten, um den Speicherdruck abzubauen.

Ich denke, wenn Ihr System nicht über genügend Arbeitsspeicher verfügt, müssen Sie mehr Arbeitsspeicher oder Auslagerungsspeicher hinzufügen, je nachdem, ob Ihnen der physische Arbeitsspeicher oder der gesamte virtuelle Arbeitsspeicher ausgeht.

Wenn Sie jedoch über einige unkontrollierte Prozesse verfügen, die aufgrund eines Speicherverlusts oder eines anderen Fehlers von Zeit zu Zeit zu viel Speicher verbrauchen, können Sie dies auf andere Weise steuern:

  1. Legen Sie ulimit -mvor dem Starten des fehlerhaften Prozesses fest, und begrenzen Sie, wie viel Speicherplatz dieser Prozess zuordnen kann.

  2. Starten Sie den fehlerhaften Prozess ordnungsgemäß nach einem Zeitplan über cron neu, wenn ein Speicherverlust vorliegt und er ziemlich vorhersehbar ist.

Auf jeden Fall ist der OOM-Killer nicht dein Freund, sondern eine lose Kanone: - /

Es ist ein 64-Bit-System von Debian mit 8 GB RAM und 6 GB Swap-Speicher. Ich weiß auch, welcher Prozess die Probleme verursacht. Ich werde Ulimit morgen als Option ausprobieren. Vielen Dank für Ihren Ratschlag! Waxhead vor 11 Jahren 0