
Solución a problemas de memoria.
Está claro que usar una Raspberry pi 3 b+, es equivalente a decir que queremos gastar poco dinero en nuestro sistema domótico, por contra, si eres como yo y piensas que para apagar unas cuantas luces, no hace falta gastar mas .
Los últimos fallos críticos que he tenido con este sistema se deben fundamentalmente a la falta de memoria de la Raspberry 3, que no es poco es un gigabyte, pero indagando más en el problema he descubierto que, si tienes un sistema mas potente, el sistema operativo tiende a incrementar continuamente el uso de la memoria, encontrándonos con el mismo problema.
También leyendo en foros descubrí que el problema está relacionado en la llamada memoria de intercambio, o memoria swap, que está fijada en una Raspberry en 100 megas, con lo que determina un grave cuello de botella para nuestro sistema, lo cual deriva en cuelgues continuos, lentitud o incluso perdida de memoria y la necesidad tediosa de tener que restaurar el sistema.
Diagnosticando el problema.
Tiempos atrás ya me di cuenta que una vez que instalas muchos addons, el sistema se vuelve lento, y hay algunos de ellos, para mí imprescindibles, como son el Node-Red, que consumen hasta un 20% de la memoria.
Para ver que tenemos problemas de memoria vamos a utilizar el componente System Monitor, la cual permite, crear sensores para monitorear el uso del disco, el uso de la memoria, el uso de la CPU y los procesos en ejecución de nuestra Rapsberry.
Para mas información está en el siguiente enlace: https://www.home-assistant.io/integrations/systemmonitor/
Pegamos en configuration.yalm, en el apartado de sensores la siguiente línea de código:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sensor: - platform: systemmonitor resources: - type: disk_use_percent arg: / - type: memory_use_percent - type: processor_use - type: memory_free - type: swap_use_percent - type: swap_use - type: swap_free |
Esto nos va a crear 7 nuevos sensores, y el que nos va a dar pistas de que sufrimos el problema con la memoria de intercambio es «swap_use» y «memory_use».
Podemos crear una tarjeta que incluya estos sensores y así ver si está relacionado con los cuelgues y reinicios del sistema:

Yo descubrí que cuando el sistema iba lento o se reiniciaba, el sensor Memory_use rondaba el 100%, y el swap_use, que es la memoria que le queda de intercambio estaba cerca de cero.
Posibles soluciones
La primera y más sencilla, es asegurarnos de no haber instalado una versión del sistema de 64 bits. Aunque se recomienda está, nuestra Raspberry con muchos addons se le atraganta la memoria y termina por colapsar.
Por tanto la primera solución y más sencilla, es hacer una copia de seguridad completa, y posteriormente instalar de nuevo el sistema en 32 bits. Para eso seguiremos el manual de está propia web y cuando elijamos la imagen nos aseguremos de que es de 32 bits:

La copia de seguridad la debemos elegir parcial, ya que nos ofrece la posibilidad de que sea completa (esto sería con el anterior sistema operativo de 64 bits, y esto es precisamente lo que queremos cambiar), así que cuando nos diga que tipo de restauración, elegimos parcial, y des chequeamos la opción del sistema operativo, esto es la primera opción.
La segunda opción está relacionada con amentar el tamaño del archivo de intercambio de 100 megas a 1 gigabite con el addon SSH & Web Terminal. Está solución la propone el creador que amablemente la comparte, JZhass, en el siguiente foro : https://community.home-assistant.io/t/how-to-increase-the-swap-file-size-on-home-assistant-os/272226
Traducido con mis aportaciones quedaría mas o menos así:
«Aumentar el tamaño del archivo de intercambio (especialmente en un SSD USB conectado a mi RPi 3B de prueba) es bastante típico cuando se intenta que una caja de Linux funcione y, en general, sea más estable…
Después de dar vueltas por este problema de GitHub 116 y viendo el progreso, creo que hay una forma simple y repetible de aumentar el tamaño del archivo de intercambio.
Esta solución sobrevivirá a reinicios y actualizaciones. Tampoco tienes que abrir la carcasa o tocar el hardware.
Ten en cuenta que esto es estrictamente para HA OS , no para Raspberry Pi OS, también conocido como Raspbian, que tiene muchas instrucciones sobre cómo crear y administrar el espacio de intercambio.
Los pasos son los siguientes:
- Crea una copia de seguridad y guárdala.
- Habilitar el «Modo avanzado» para el perfil de usuario en HA (haga clic en el usuario en la barra de navegación inferior izquierda en HA y desplácese hacia abajo, en el circulito con la letra). Si no hace esto, no podrá ver este complemento SSH & Web Terminal en la tienda de complementos. Vea la advertencia en la parte inferior de los complementos que indica que debe habilitar esto cuando no ve una lista completa de addons o puedan faltar.
- Instale un complemento llamado «SSH & Web Terminal»: este es el complemento NO OFICIAL. El oficial no funcionará. Es decir, hay dos, debes instalar el que se indica no el que contiene solo SSH en el nombre.
- Deshabilitar el modo de protección para el complemento
- En Configuración para el complemento, cambie el nombre de usuario y la contraseña a cualquier cosa que NO tiene que ser simple porque valida su entrada contra la base de datos «he sido pwned».
- También en Configuración para el complemento, reemplace la línea init_commands: [] en la parte inferior con lo siguiente e inicie el complemento:«
En definitiva, instala el addon SSH & Web Terminal , en configuración completa los campos de usuario y password, y en init_commands pega lo que se reproduce a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
init_commands: - >- if [ ! -f /backup/_swap.swap ]; then fallocate -l 1G /backup/_swap.swap && mkswap /backup/_swap.swap && chmod 0600 /backup/_swap.swap && swapon /backup/_swap.swap ; elif [[ ! $(dmesg|grep _swap.swap) = *swap\ on* ]]; then swapon /backup/_swap.swap; fi packages: [] share_sessions: false ssh: allow_agent_forwarding: false allow_remote_port_forwarding: false allow_tcp_forwarding: false authorized_keys: [] compatibility_mode: false password: ponercualquiercosa sftp: false username: hassio zsh: true |
A mi me ha funcionado tanto en sistema de 64 bits como en de 32. En 64 la memoria oscila continuamente, y se suele quedar por un 82%, con lo que alguna vez el sistema puede ir lento, así que además cambie el sistema a uno de 32 bits, y ahora la memoria swap esta en un 69-70% con lo que se obtiene la estabilidad deseada.
Como apunte final, puedes aumentar la memoria a 2 gigas sencillamente cambiando el 1G por 2G en el código pegado en init_commands.
2 COMENTARIOS
Buenas!
Gracias por el artículo. He llegado a él precisamente porque tengo el mismo problems de bloqueos. He tenido una pi 3b conectada años con raspbian y hace dos semanas decidí instalar HA en docker para controlar 4 sensores(literal), tengo también node red en docker.
El caso es que en 2 semanas 3 cuelgues ya, no es fiable.
Esta solución de instalar una versión de 32bits se puede aplicar en raspbian o solo está probada en HA Os?
Gracias!
David
Hola David,
Disculpa la demora, pero esto es totalmente una afición y me inundan de Spam los comentarios, con lo que hace tiempo que no esto atentos a ellos.
En cuanto a tu pregunta, yo tengo instalado el HA de 32bits más la solución del plugin a la que hago referencia y no se me ha colgado ni una vez más. Lo que comentas de raspbian, supongo a que te refieres a que instalas este sistema operativo y luego, desde el, HA. Yo instalo directamente la imagen de HA de la página tal y como indico en el tutorial. Te recomiendo que pruebes, solo fallando se aprende con esto. Saludos!