Gibt es eine Möglichkeit, den OOM-Killer-Anpassungswert richtig einzustellen, wenn ein Daemon-Prozess (in meinem Fall Apache) startet? Ich möchte den Apache-Prozessen eine höhere Wahrscheinlichkeit geben, dass sie getötet werden, und es praktisch unmöglich machen, dass einige wichtigere Dienste vom OOM-Killer getötet werden.
Akzeptierte Antwort:
Ich denke, Sie würden am besten ein separates Skript als Teil Ihres init.d hinzufügen. Darin werden Sie so etwas tun wollen
echo 15 > /proc/`pidof APP_NAME`/oom_adj
Die pidof APP_NAME
ruft die Prozess-ID der App mit diesem Namen ab. Das Schreiben von 15 nach /proc/{pid}/oom_adj erhöht die „Schlechtigkeit“ des Prozesses {pid}, wodurch es wahrscheinlicher wird, dass er vom OOM-Killer beendet wird.
Der Artikel Taming the OOM killer von LWN.net weist auch auf einige andere Ideen hin, die vorgeschlagen wurden, um die Spezifikation eines „oom_victim“ zu ermöglichen, aber ich bin mir nicht sicher, ob eine davon tatsächlich im Kernel enthalten ist.
Übrigens:Die beste Lösung wäre, den OOM Killer gar nicht erst verwenden zu müssen. Denken Sie an das ungeschriebene Motto von Micro$oft:Es gibt kein Problem, das nicht durch mehr RAM behoben werden kann.
[Anmerkung:Wenn es mehr als einen dieser Prozesse geben könnte, möchten Sie vielleicht den Code ein wenig überarbeiten.]