Em nosso cluster, estamos restringindo os recursos de nossos processos, por exemplo, memory ( memory.limit_in_bytes
).
Eu acho que, no final, isso também é tratado através do killer OOM no kernel do Linux (parece com isso lendo o código-fonte ).
Existe alguma maneira de obter um sinal antes que meu processo seja finalizado? (Assim como a -notify
opção para SGEsqsub
, que serão enviadas SIGUSR1
antes do término do processo.)
Eu li sobre /dev/mem_notify
aqui, mas não tenho - há algo mais hoje em dia? Eu também li isso que parece um pouco relevante.
Quero ser capaz de, pelo menos, despejar um pequeno rastreamento de pilha e talvez outras informações úteis sobre depuração - mas talvez eu possa me recuperar liberando alguma memória.
Uma solução alternativa que estou usando atualmente é esse pequeno script que verifica frequentemente se estou próximo (95%) do limite e, se estiver, envia o processo a SIGUSR1
. No Bash, estou iniciando esse script em background ( cgroup-mem-limit-watcher.py &
) para que ele procure por outros procs no mesmo cgroup e saia automaticamente quando o processo do Bash pai morre.