GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Empfangen Sie ein Signal, bevor der Prozess von Oom Killer / Cgroups getötet wird?

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


Linux
  1. Linux – Wie entscheidet der Oom-Killer, welcher Prozess zuerst getötet wird?

  2. Debian – Oom Killer funktioniert nicht richtig, führt zu einem eingefrorenen Os?

  3. Wie kann man verhindern, zu SWAP zu gehen?

  4. Wie wird die Speichernutzung in Linux gemeldet?

  5. OOM-Killer tötet Dinge mit viel (?) freiem RAM

Oom Killer-Anpassung für den Prozess beim Start festlegen?

Maximale Anzahl von Threads pro Prozess in Linux?

Herausfinden, welcher Prozess von Linux OOM Killer getötet wurde

Speichernutzung des aktuellen Prozesses in C

Malloc unter Linux ohne Overcommitting

Was ist ein gestoppter Prozess unter Linux?