In unserem Cluster beschränken wir unsere Prozessressourcen, z. Arbeitsspeicher (memory.limit_in_bytes
).
Ich denke, am Ende wird das auch über den OOM-Killer im Linux-Kernel abgewickelt (sieht so aus, wenn man den Quellcode liest).
Gibt es eine Möglichkeit, ein Signal zu erhalten, bevor mein Prozess beendet wird? (Genauso wie die -notify
Option für qsub
von SGE , der SIGUSR1
sendet bevor der Prozess beendet wird.)
Ich habe über /dev/mem_notify
gelesen hier, aber ich habe es nicht – gibt es heutzutage etwas anderes? Ich habe dies auch gelesen, was einigermaßen relevant erscheint.
Ich möchte in der Lage sein, zumindest einen kleinen Stack-Trace und vielleicht einige andere nützliche Debug-Informationen auszugeben – 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 überprüft, ob ich nahe (95%) am Limit bin, und wenn ja, sendet es dem Prozess ein SIGUSR1
. In Bash starte ich dieses Skript im Hintergrund (cgroup-mem-limit-watcher.py &
), sodass es nach anderen Procs in derselben Cgroup Ausschau hält und automatisch beendet wird, wenn der übergeordnete Bash-Prozess stirbt.
Akzeptierte Antwort:
Es ist möglich, sich für eine Benachrichtigung zu registrieren, wenn die Speichernutzung einer Kontrollgruppe einen Schwellenwert überschreitet. Wenn Sie den Schwellenwert an einem geeigneten Punkt unterhalb des tatsächlichen Grenzwerts festlegen, können Sie im Prinzip ein Signal senden oder andere Maßnahmen ergreifen.
Siehe:
https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt