Empfangssignal, bevor der Prozess von OOM-Killern / C-Gruppen beendet wird

11

In unserem Cluster beschränken wir unsere Prozessressourcen, z memory.limit_in_bytes. B. Speicher ( ).

Ich denke, am Ende wird dies auch über den OOM-Killer im Linux-Kernel erledigt (sieht so aus, als würde man den Quellcode lesen ).

Gibt es eine Möglichkeit, ein Signal zu erhalten, bevor mein Prozess abgebrochen wird? (Genau wie die -notifyOption für SGEsqsub , die gesendet wird, SIGUSR1bevor der Prozess beendet wird.)

Ich habe /dev/mem_notify hier darüber gelesen , aber ich habe es nicht - gibt es heutzutage noch etwas anderes? Ich habe auch gelesen , das die etwas relevant zu sein scheint.

Ich möchte in der Lage sein, zumindest einen kleinen Stack-Trace und möglicherweise einige andere nützliche Debug-Informationen zu sichern - aber vielleicht kann ich mich sogar erholen, indem ich etwas Speicher freigebe.

Eine Problemumgehung, die ich derzeit verwende, ist dieses kleine Skript, das häufig prüft, ob ich nahe (95%) am Limit bin, und in diesem Fall den Prozess a sendet SIGUSR1. In Bash cgroup-mem-limit-watcher.py &starte ich dieses Skript in background ( ), damit es nach anderen Prozessen in derselben cgroup sucht und automatisch beendet wird, wenn der übergeordnete Bash-Prozess stirbt.

Albert
quelle
Ich konnte weder Autoritätsquellen finden noch einen Weg finden, OOM Killer für einen bestimmten Prozess manuell aufzurufen (um die Idee zu testen) , aber nach dem, was ich gefunden habe, scheint OOM Killer einfach SIGTERM zu senden, also müssen Sie festlegen ein Handler für dieses Signal.
Hi-Angel
5
@ Hi-Angel: Aus dem Linux-Quellcode geht hervor , dass es SIGKILL sendet.
Albert
@ Albert Nach dem Lesen des Quellcodes denke ich auch, dass OOM Killer direkt ein SIGKILL-Signal senden wird.
Andy

Antworten:

5

Es ist möglich, sich für eine Benachrichtigung zu registrieren, wenn die Speichernutzung einer Gruppe einen Schwellenwert überschreitet. Wenn Sie den Schwellenwert an einem geeigneten Punkt unterhalb des tatsächlichen Grenzwerts einstellen, können Sie im Prinzip ein Signal senden oder andere Maßnahmen ergreifen.

Sehen:

https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt

Chris Emerson
quelle
5

OOM Killer sendet einen SIGKILL, da es sonst kontraproduktiv wäre, dem problematischen Programm die Wahl zu lassen, fortzufahren.

Dies bedeutet, dass ein Prozess absolut nicht wissen kann, wann er von ihm getötet wird.

Das Verwalten solcher Probleme erfordert normalerweise Korrekturen an den Programmen oder deren Konfiguration. Abhängig von der Systemkonfiguration kann das Betriebssystem durch einfaches Erhöhen des Swap-Speicherplatzes manchmal mehr Flexibilität bei der Speicherverwaltung erhalten, um solch drastische Maßnahmen zu vermeiden.

Julie Pelletier
quelle