GNU/Linux >> Znalost Linux >  >> Linux

Přijmout signál, než je proces zabit Oom Killer / Cgroups?

V našem clusteru omezujeme zdroje našich procesů, např. paměti (memory.limit_in_bytes ).

Myslím, že to je nakonec také řešeno přes OOM killer v linuxovém jádře (vypadá to tak, že si přečtete zdrojový kód).

Existuje nějaký způsob, jak získat signál, než bude můj proces zabit? (Stejně jako -notify možnost pro qsub SGE , který odešle SIGUSR1 než je proces zabit.)

Četl jsem o /dev/mem_notify tady, ale já to nemám – existuje v dnešní době něco jiného? Také jsem četl toto, což se zdá být poněkud relevantní.

Chci mít možnost alespoň vypsat malé trasování zásobníku a možná i nějaké další užitečné informace o ladění – ale možná bych se mohl dokonce obnovit uvolněním paměti.

Jedno řešení, které v současné době používám, je tento malý skript, který často kontroluje, zda se blížím (95 %) limitu, a pokud ano, odešle procesu SIGUSR1 . V Bash spouštím tento skript na pozadí (cgroup-mem-limit-watcher.py & ), takže sleduje další procesy ve stejné cgroup a automaticky se ukončí, když nadřazený proces Bash zemře.

Přijatá odpověď:

Je možné zaregistrovat se pro upozornění, když využití paměti cgroup překročí prahovou hodnotu. V zásadě vám nastavení prahu na vhodný bod pod skutečným limitem umožní vyslat signál nebo provést jinou akci.

Viz:

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


Linux
  1. Linux – Jak se Oom Killer rozhodne, který proces zabije jako první?

  2. Maximální počet vláken na proces v Linuxu?

  3. Využití paměti aktuálního procesu v C

  1. Jak zabránit přechodu na SWAP?

  2. Proč se linux out-of-memory (OOM) zabiják nespouští automaticky, ale pracuje s klíčem sysrq?

  3. OOM zabiják zabíjející věci se spoustou (?) volné RAM

  1. Linux – Omezit využití paměti pro jeden linuxový proces?

  2. Debian – Oom Killer nefunguje správně, vede k zamrzlému OS?

  3. Nastavit úpravu Oom Killer pro proces při spuštění?