¿Reiniciar el sistema si se queda sin memoria?

¿Reiniciar el sistema si se queda sin memoria?

Necesito ejecutar algunas pruebas de memoria pesada en una computadora remota a través de SSH. La última vez que hice esto, la computadora dejó de responder y fue necesario que alguien la reiniciara físicamente.

¿Hay alguna manera de configurarlo para que el sistema se reinicie en lugar de congelarse si se utiliza demasiada memoria? (Tengo acceso de root). La versión del kernel es 4.9.0.

Respuesta1

Para monitorear/recuperar el control de un servidor "inestable"/desactivado, recomendaría utilizar un dispositivo de vigilancia de hardware o, en su defecto, un software de vigilancia; en Debian puedes instalarlo con:

sudo apt-get install watchdog

Luego edita /etc/watchdog.confy agrega umbrales o pruebas; Desde lo alto de mi cabeza, el perro guardián también se activa de tal manera que si el kernel no lo ve durante un buen rato, se reinicia. por ejemplo, si una rutina de software no habla en un tiempo fijo con /dev/watchdog0o algo similar.

Por ejemplo, puede definir umbrales de carga en /etc/watchdog.conf:

max-load-1             = 40
max-load-5             = 18
max-load-15            = 12

Tenga en cuenta también que algunas placas/chipsets vienen con dispositivos de vigilancia integrados; Si no me equivoco, el Arm A20 es uno de ellos.

Dehombre perro guardián

El kernel de Linux puede restablecer el sistema si se detectan problemas graves. Esto se puede implementar a través de un hardware de vigilancia especial o mediante un software de vigilancia ligeramente menos confiable dentro del kernel. De cualquier manera, es necesario que haya un demonio que le indique al kernel que el sistema está funcionando bien. Si el demonio deja de hacer eso, el sistema se reinicia.

El perro guardián es un demonio. Abre /dev/watchdog y sigue escribiendo en él con la frecuencia suficiente para evitar que el kernel se reinicie, al menos una vez por minuto. Cada escritura retrasa el tiempo de reinicio un minuto más. Después de un minuto de inactividad, el hardware de vigilancia provocará el reinicio. En el caso del perro guardián del software, la capacidad de reiniciar dependerá del estado de las máquinas y de las interrupciones.

El demonio de vigilancia se puede detener sin provocar un reinicio si el dispositivo /dev/watchdog se cierra correctamente, a menos que su kernel esté compilado con la opción CONFIG_WATCHDOG_NOWAYOUT habilitada.

ver tambiénRaspberry Pi y Arduino: construcción de sistemas confiables con temporizadores WatchDog

Respuesta2

Para responder a su pregunta específica, puede configurar sysctls como:

vm.panic_on_oom=1
kernel.panic=10

para que el kernel entre en pánico si el sistema se queda sin memoria y luego se reinicie después de diez segundos de entrar en pánico.

En sistemas nuevos con soporte completo para cgroups2, systemd-oomd puede ser una opción menos drástica.

información relacionada