------------------------------------------
earlyoom qué descubrimiento
08 may 2022
------------------------------------------
¿Sabéis una de esas veces en las que estás soportando algo
pensando que no tiene remedio fácil y de repente encuentras
una solución ideal? ¿No?
Pues a mi me ha pasado con este programa. Resulta que
Linux cuando se va quedando sin memoria no se cuelga pero
prácticamente deja de responder al teclado y el ratón lo
que me obligaba a resetear el ordenador con cierta frecuencia.
Particularmente me pasa con, gimp que con sus plugins
a veces come una cantidad de memoria increíble. Ya sé
que las imágenes son grandes y las capas ocupan mucho etc
pero me gustaría que dijera: esa operación va a consumir
casi toda la memoria disponible ¿está seguro?. También
me pasa con firefox y algunas páginas webs particularmente
hostiles con el usuario (sí, facebook te estoy mirando a ti)
que tras un rato viendo vídeos producen el mismo fenómeno.
Miras el porcentaje de memoria consumida y de repente estás
en un 85% y muchas veces no tienes tiempo material de empezar
a matar procesos para liberarte.
Empecé a leer un poco y me di cuenta de que no sólo me
pasaba a mi sino que era un problema conocido de antiguo. La
solución, la encontré también leyendo es un programa
llamado `earlyoom` (de "early out of memory"). Se instala
sin problemas en Debian que es mi distribución más usada con
`sudo apt install earlyoom`
Y al instalarse lo hace como servicio de systemd con lo cual
está permanentemente vigilando.
Si se ejecuta sin más dice algo así:
earlyoom v1.6.2 mem total: 3930 MiB, swap total: 975 MiB
sending SIGTERM when mem <= 10.00% and swap <= 10.00%,
SIGKILL when mem <= 5.00% and swap <= 5.00%
mem avail: 1961 of 3930 MiB (49.91%), swap free: 830 of
975 MiB (85.08%)
[...]
Que explica qué va a hacer cuando se alcancen ciertos
límites. Por defecto se ejecuta como un servicio y se puede
comprobar su estado con:
`systemctl status earlyoom`
Se puede probar con `tail /dev/zero` OJO porque esto ocupa
toda la memoria, el indicador llegó a 92% y luego él sólo
mató el proceso, tras unos segundos la memoria volvió
a la normalidad. Al parecer lo que hace cuando alcanza
ciertos límites es matar el proceso que más memoria está
consumiendo en opinión del núcleo.
Edito `/etc/default/earlyoom` para cambiar las opciones. Pongo
esto:
# informes cada hora (-r 3600)
# memoria mínima <15% para TERM y <10% para KILL
#swap mínimo <10% para TERM y <5% para KILL
# EARLYOOM_ARGS="-r 3600 -m 15,10 -s 10,5"
Luego hago `sudo systemctl restart earlyoom.service` y a
ver si funciona.
Pruebo a cargar Gimp con un montón de imágenes enormes y
el navegador sigue respondiendo a pesar de un porcentaje muy
elevado de consumo de memoria, cuando se carga un programa
auxiliar para editar una imagen raw, earlyoom mata Gimp y
todo lo demás sigue funcionando bien, la memoria vuelve
enseguida a niveles normales.
Vamos a ver si en el futuro sigue funcionando igual de bien,
de momento estoy muy contento.