GNU/Linux >> Tutoriales Linux >  >> Linux

¿Recibir señal antes de que Oom Killer/Cgroups elimine el proceso?

En nuestro clúster, estamos restringiendo los recursos de nuestros procesos, p. memoria (memory.limit_in_bytes ).

Creo que, al final, esto también se maneja a través del asesino OOM en el kernel de Linux (parece leer el código fuente).

¿Hay alguna forma de obtener una señal antes de que se elimine mi proceso? (Al igual que el -notify opción para qsub de SGE , que enviará SIGUSR1 antes de que se elimine el proceso).

Leí sobre /dev/mem_notify aquí pero no lo tengo, ¿hay algo más hoy en día? También leí esto que parece algo relevante.

Quiero poder al menos volcar un pequeño seguimiento de la pila y tal vez alguna otra información útil de depuración, pero tal vez incluso pueda recuperarme liberando algo de memoria.

Una solución que estoy usando actualmente es este pequeño script que verifica con frecuencia si estoy cerca (95 %) del límite y, de ser así, envía al proceso un SIGUSR1 . En Bash, estoy iniciando este script en segundo plano (cgroup-mem-limit-watcher.py & ) para que busque otros procesos en el mismo cgroup y se cierre automáticamente cuando el proceso principal de Bash muere.

Respuesta aceptada:

Es posible registrarse para recibir una notificación cuando el uso de memoria de un cgroup supere un umbral. En principio, establecer el umbral en un punto adecuado por debajo del límite real le permitiría enviar una señal o realizar otra acción.

Ver:

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


Linux
  1. Linux:¿cómo decide The Oom Killer qué proceso eliminar primero?

  2. Debian:¿Oom Killer no funciona correctamente y conduce a un sistema operativo congelado?

  3. ¿Establecer el ajuste Oom Killer para el proceso al iniciar?

  4. Asesino de falta de memoria de Linux

  5. ¿Cómo evitar ir a SWAP?

UNIX/Linux:3 Maneras de Enviar Señal a Procesos

Fundamentos de señales de Linux - Parte I

Encontrar qué proceso fue eliminado por Linux OOM killer

¿Qué mató mi proceso y por qué?

Malloc en Linux sin compromisos excesivos

¿Qué es un proceso detenido en Linux?