Bei einigen Recherchen habe ich herausgefunden, dass es möglich ist, bestimmte Prozesse zu optimieren oder sogar immun gegen den OOM-Killer zu machen, indem man einen Wert in /proc/pid/oom_adj eingibt. Natürlich muss ich die PID für meinen Prozess mithilfe von pidof oder pgrep oder etwas Ähnlichem herausfinden und ein Skript erstellen, das ich ausführe, sobald alle meine Prozesse laufen.
Das Problem mit dem OOM-Killer ist das gleiche wie mit jedem anderen Killer. Oberflächlich betrachtet mag er vernünftig und rational erscheinen, aber tief im Inneren ist er tatsächlich ernsthaft gestört, völlig verrückt und oft nicht in der Lage, ein korrektes Urteil zu fällen.
Mir persönlich macht ein bisschen Töten nichts aus, solange ich weiß, was vor sich geht, und eine gewisse Kontrolle über die Opfer habe (beruhigt euch, Leute, ich rede vom Computerkram). Ich suche also nach einer besseren Möglichkeit, bestimmte Prozesse vor dem gefürchteten OOM-Killer zu schützen, damit ich nicht jedes Mal ein Skript ausführen muss, wenn alle meine Programme laufen oder wenn ich ein neues Programm starte. Irgendwelche Ideen, wie man das einfach erreichen kann?
Antwort1
Sie sollten sich bei der Verwaltung Ihrer Prozesse nicht auf OOM Killer verlassen. OOM Killer ist eine Maßnahme der letzten Wahl, wenn die einzige Alternative ein Systemabsturz ist. Beispiel: Der gesamte Cache- und Festplattenpufferspeicher wurde geleert und festgeschrieben, alles, was ausgelagert/verworfen werden kann, wurde verarbeitet, und Sie haben immer noch nicht genug Speicher ... Natürlich möchten Sie nicht, dass Ihr laufendes System jemals diesen Zustand erreicht.
Aufgrund der strengen Beschränkungen, denen OOM Killer unterliegt (kann keinen weiteren Speicher zuweisen, kann keine anderen Prozesse einlagern usw.),WilleBeenden Sie Prozesse, die nicht beendet werden sollen, um den Speicherdruck zu verringern.
Ich denke, wenn Ihr System einfach nicht über genügend Speicher verfügt, müssen Sie mehr Speicher oder Swap-Speicher hinzufügen, je nachdem, ob Ihnen der physische Speicher oder der gesamte virtuelle Speicher ausgeht.
Wenn Sie andererseits einige außer Kontrolle geratene Prozesse haben, die aufgrund eines Speicherlecks oder eines anderen Fehlers von Zeit zu Zeit zu viel Speicher verbrauchen, können Sie dies auf andere Weise kontrollieren:
Legen Sie dies
ulimit -m
vor dem Starten des fehlerhaften Prozesses fest und begrenzen Sie, wie viel Speicher dieser Prozess zuordnen kann.Starten Sie den fehlerhaften Prozess planmäßig und ordnungsgemäß über Cron neu, wenn ein Speicherverlust vorliegt und dieser einigermaßen vorhersehbar ist.
Auf jeden Fall ist der OOM-Killer nicht Ihr Freund, sondern ein unberechenbarer Typ :-/