-
Liberar memoria RAM no usada en OpenWrt
En OpenWrt, cuando vemos que la memoria RAM aparece como “usada”, no siempre significa que el router esté realmente sin memoria. Linux utiliza parte de la RAM libre como caché para acelerar el acceso a archivos, directorios e información del sistema. Esa memoria aparece ocupada, pero normalmente puede liberarse automáticamente cuando un proceso la necesita. Aun así, en algunos casos puede interesarnos liberar manualmente esa caché: por ejemplo, después de instalar paquetes, después de copiar muchos archivos, después de hacer pruebas intensivas o simplemente para comprobar cuánta memoria queda realmente disponible sin cachés del kernel.
Ver la memoria antes de liberar caché
Antes de tocar nada, podemos ver el estado actual de la memoria con:
free -m
En OpenWrt también podemos usar:
cat /proc/meminfo
El comando **free -m** suele ser suficiente para una comprobación rápida.
Liberar la caché de RAM en OpenWrt
Para liberar la memoria usada por cachés del kernel, ejecutamos:
sync echo 3 > /proc/sys/vm/drop_caches
El primer comando, **sync**, fuerza la escritura a disco de los datos pendientes. Esto es importante para evitar descartar cachés antes de que el sistema haya terminado de escribir información pendiente.
El segundo comando escribe el valor **3** en **/proc/sys/vm/drop_caches**, lo que indica al kernel que libere varios tipos de caché.
Comprobar el resultado
Podemos comprobar el antes y el después ejecutando todo junto:
free -m sync echo 3 > /proc/sys/vm/drop_caches free -m
Después de ejecutar el comando, deberíamos ver menos memoria usada por caché y más memoria libre o disponible.
Valores en drop_caches
El archivo **/proc/sys/vm/drop_caches** acepta varios valores:
echo 1 > /proc/sys/vm/drop_caches
Libera la page cache.
echo 2 > /proc/sys/vm/drop_caches
Libera dentries e inodes.
echo 3 > /proc/sys/vm/drop_caches
Libera page cache, dentries e inodes.
En la práctica, si queremos hacer una limpieza manual completa de cachés, usamos el valor **3**.
Esto no libera memoria usada por procesos
Este método no mata procesos ni reduce directamente la memoria usada por servicios en ejecución. Por ejemplo, si tenemos servicios como **dnsmasq**, **uhttpd**, **hostapd**, **wpad**, **AdGuard Home**, **Suricata**, **collectd** o cualquier otro demonio consumiendo RAM, este comando no va a liberar esa memoria.
Para ver qué procesos están usando memoria, podemos ejecutar:
top
O, si tenemos instalado **htop**:
htop
Si el problema real es un proceso que consume demasiada RAM, liberar caché no soluciona el problema. En ese caso tendremos que revisar el servicio concreto, reiniciarlo, reconfigurarlo o directamente desinstalarlo si el router no tiene recursos suficientes.
Script para liberar RAM cacheada
Si queremos tener un comando cómodo para ejecutarlo manualmente cuando lo necesitemos, podemos crear un script:
nano /root/liberar-cache-ram.sh
Contenido del script:
#!/bin/sh free -m sync echo 3 > /proc/sys/vm/drop_caches free -m
Le damos permisos de ejecución:
chmod +x /root/liberar-cache-ram.sh
Y lo ejecutamos cuando queramos:
/root/liberar-cache-ram.sh
Cuándo tiene sentido liberar la RAM cacheada
No deberíamos ejecutar **drop_caches** constantemente ni meterlo en cron sin una razón clara. La caché de Linux no es un problema: normalmente es una ventaja. El kernel usa RAM libre para acelerar el sistema, y cuando una aplicación necesita memoria, esa caché se libera automáticamente. Si liberamos la caché cada pocos minutos, podemos empeorar el rendimiento del router, porque obligamos al sistema a volver a leer desde disco o desde la memoria flash información que ya tenía cacheada.
Puede tener sentido hacerlo puntualmente después de pruebas, instalaciones, copias grandes o diagnósticos de consumo de memoria. También puede ser útil cuando queremos comparar el consumo real de memoria antes y después de levantar un servicio concreto. Lo que no tiene sentido es usarlo como “solución” permanente para un router que se queda sin RAM. Si OpenWrt se queda sin memoria de forma habitual, el problema suele estar en otro sitio: demasiados servicios, un paquete pesado, una fuga de memoria, un router con poca RAM o una configuración demasiado exigente para el hardware.
Los hacks de hacks4geeks son minitutoriales rápidos pensados para geeks con conocimiento informático avanzado. Si no entiendes o no consigues ejecutar un hack de esta web considera suscribirte a Premium para solicitar asistencia sobre el mismo.