recibir señal antes de que OOM killer / cgroups elimine el proceso

11

En nuestro clúster, estamos restringiendo nuestros recursos de procesos, por ejemplo, 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 que se lee el código fuente ).

¿Hay alguna forma de obtener una señal antes de que se cierre mi proceso? (Al igual que la -notifyopción para SGEqsub , que se enviará SIGUSR1antes de que finalice el proceso).

Leí acerca de /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 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 alternativa que estoy usando actualmente es este pequeño script que con frecuencia comprueba si estoy cerca (95%) del límite y, de ser así, envía el proceso a SIGUSR1. En Bash, estoy comenzando este script en segundo plano ( cgroup-mem-limit-watcher.py &) para que busque otros procs en el mismo cgroup y se cierre automáticamente cuando el proceso Bash principal muere.

Albert
fuente
No pude encontrar ninguna fuente de autoridad, ni pude encontrar una manera de invocar al asesino OOM para un proceso específico manualmente (para probar la idea) , pero por lo que encontré parece que el asesino OOM simplemente envía SIGTERM, por lo que debe configurar Un controlador para esta señal.
Hi-Angel
55
@ Hi-Angel: desde el código fuente de Linux , parece que envía SIGKILL.
Albert
@ Albert Después de leer el código fuente, también creo que OOM Killer enviará directamente una señal SIGKILL.
Andy

Respuestas:

5

Es posible registrarse para recibir una notificación cuando el uso de memoria de un cgroup supera 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 tomar otras medidas.

Ver:

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

Chris Emerson
fuente
5

OOM killer envía un SIGKILL ya que de lo contrario sería contraproducente dejar que el programa problemático elija continuar.

Esto significa que no hay absolutamente ninguna manera para que un proceso sepa cuándo está a punto de ser asesinado por él.

La gestión de tales problemas generalmente implica hacer correcciones a los programas o su configuración. A veces, dependiendo de la configuración del sistema, simplemente aumentar el espacio de intercambio puede dar al sistema operativo más flexibilidad de administración de memoria para evitar medidas tan drásticas.

Julie Pelletier
fuente