OOM-Killer
Der OOM-Killer (Out-of-Memory-Killer) ist der Teil des Linux-Kernels, der einen Prozess beendet, wenn das System keinen Arbeitsspeicher mehr hat und keinen freigeben kann. Er wählt den Prozess anhand seines OOM-Scores aus, in der Regel denjenigen, der am meisten Arbeitsspeicher verbraucht. Das Kernel-Protokoll zeichnet jeden OOM-Kill auf.
1Wie das Opfer ausgewählt wird
Jeder Prozess hat einen Score in /proc/<pid>/oom_score, der mit seinem Arbeitsspeicherverbrauch wächst. /proc/<pid>/oom_score_adj, von -1000 bis 1000, passt diesen an; -1000 bedeutet, dass der Prozess niemals ausgewählt wird.
2OOM-Kills finden
Der Kernel schreibt 'Out of memory: Killed process' in sein Protokoll. journalctl -k | grep -i oom oder dmesg | grep -i oom zeigt diese Meldungen zusammen mit dem Prozessnamen und dessen Arbeitsspeicherverbrauch an.
3Prävention
Fügen Sie Arbeitsspeicher oder Swap hinzu, begrenzen Sie speicherhungrige Dienste oder setzen Sie Limits pro Dienst mit systemd-Optionen wie MemoryMax=. Einige Distributionen führen auch systemd-oomd aus, das basierend auf dem Speicherdruck früher eingreift.
Wie man einen OOM-Kill untersucht
- Durchsuchen Sie das Kernel-Protokoll:
journalctl -k | grep -i -A5 'out of memory' - Notieren Sie den beendeten Prozess und dessen Speichergröße.
- Überprüfen Sie den aktuellen Arbeitsspeicher und Swap:
free -h - Finden Sie die größten Prozesse:
ps aux --sort=-rss | head - Fügen Sie Swap hinzu oder begrenzen Sie den Dienst und beobachten Sie dann, ob es erneut auftritt.
Vorsicht
- Das Setzen von oom_score_adj auf -1000 für viele Prozesse kann dazu führen, dass der Kernel keine sichere Wahl mehr hat.
- Das Deaktivieren des Schutzes vor Memory-Overcommit ohne entsprechendes Verständnis kann an anderer Stelle zu Fehlern führen.
Verwandte Artikel
- Swap-Speicher unter LinuxWas Swap ist, wie man ihn mit free und swapon anzeigt, wie man eine Swap-Datei hinzufügt und was vm.swappiness bewirkt.
- Load AverageWas die drei Load-Average-Zahlen bedeuten, wie sie sich auf CPU-Kerne beziehen und wann eine hohe Last ein Problem darstellt.
- journalctl und das systemd-JournalErfahren Sie, wie Sie Protokolle mit journalctl lesen, den Speicherplatzbedarf des Journals prüfen und es mit --vacuum-Optionen sicher verkleinern.
Quellen
- proc(5) Handbuchseite: oom_score und oom_score_adj man7.org
- Out Of Memory Management (kernel.org) kernel.org
Hinweis: RainServer bietet Überwachung und sichere Bereinigung für Linux-Server; es zeigt an, was sich ändern wird, und fragt vorher nach.
Zuletzt geprüft: