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