------------------------------------------
   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.