É possível registrar uma notificação quando o uso de memória do cgroup ultrapassa um limite. Em princípio, definir o limite em um ponto adequado abaixo do limite real permitiria que você enviasse um sinal ou realizasse outra ação.
Veja:
No nosso cluster, estamos restringindo nossos recursos de processos, por exemplo, memória ( memory.limit_in_bytes
).
Eu acho que, no final, isso também é tratado através do OOM killer no kernel do Linux (parece que ele está lendo o código-fonte ).
Existe alguma maneira de obter um sinal antes do meu processo ser morto? (Assim como a opção -notify
para % de qsub
do SGE, que enviará SIGUSR1
antes do processo é morto.)
Eu li sobre /dev/mem_notify
aqui mas eu não tenho - há algo mais hoje em dia? Eu também li isso , que parece um pouco relevante.
Eu quero ser capaz de, pelo menos, despejar um pequeno rastreamento de pilha e talvez algumas outras informações de depuração úteis - mas talvez eu possa até mesmo recuperar libertando alguma memória.
Uma solução atualmente em uso é este pequeno script que freqüentemente verifica se estou perto (95%) do limite e, em caso afirmativo, envia o processo a SIGUSR1
. No Bash, estou iniciando este script em segundo plano ( cgroup-mem-limit-watcher.py &
) para que ele observe outros procs no mesmo cgroup e saia automaticamente quando o processo pai de Bash for interrompido.
É possível registrar uma notificação quando o uso de memória do cgroup ultrapassa um limite. Em princípio, definir o limite em um ponto adequado abaixo do limite real permitiria que você enviasse um sinal ou realizasse outra ação.
Veja:
O OOM killer envia um SIGKILL, pois, caso contrário, seria contraproducente deixar o programa problemático a escolha de continuar.
Isso significa que não há absolutamente nenhuma maneira de um processo saber quando está prestes a ser morto por ele.
Gerenciar esses problemas geralmente implica fazer correções nos programas ou em sua configuração. Às vezes, dependendo da configuração do sistema, simplesmente aumentar o espaço de troca pode dar ao sistema operacional mais flexibilidade de gerenciamento de memória para evitar medidas drásticas.
Tags kill out-of-memory limit cgroups