En general, no es necesario liberar la memoria RAM manualmente en Linux. El kernel gestiona automáticamente la memoria y utiliza parte de ella como caché para mejorar el rendimiento.
Por eso, ver una cantidad elevada de RAM ocupada no significa necesariamente que la memoria se esté desperdiciando. Linux puede utilizar la RAM libre para mantener en caché datos de archivos y otras estructuras que pueden reutilizarse rápidamente.
¿Cuándo debería preocuparme por la memoria?
Más que fijarnos únicamente en la cantidad de memoria free, es conveniente observar especialmente el valor available.
Este valor representa una estimación de la memoria que el sistema puede proporcionar a nuevas aplicaciones sin necesidad de recurrir al swap.
Por ejemplo:
total used free shared buff/cache available
Mem: 7981 2541 1201 450 4238 4651
Swap: 2048 512 1536
En este ejemplo, aunque solamente aparecen unos 1201 MB como free, hay unos 4651 MB de memoria available. Esto no significa que los otros 3,5 GB estén “perdidos”: buena parte corresponde a cachés que Linux puede recuperar cuando sea necesario.
1. Monitorizar la memoria RAM
Para observar el estado de la memoria en tiempo real podemos utilizar:
watch -n 1 free -m
Explicación:
watch -n 1→ Ejecuta el comando cada segundo.free -m→ Muestra las cantidades de memoria en MB.
La columna available es especialmente interesante porque proporciona una estimación de la memoria que puede utilizarse para nuevas aplicaciones sin necesidad de hacer swap.
¿Qué significa buff/cache?
La columna buff/cache incluye memoria utilizada por el kernel para buffers y cachés. Una parte importante de esta memoria es reclamable.
Linux mantiene estos datos en RAM porque acceder a ellos desde la memoria es mucho más rápido que volver a leerlos del almacenamiento.
Si posteriormente un programa necesita más memoria, el kernel puede recuperar memoria de estas cachés automáticamente.
Por tanto:
RAM utilizada para caché ≠ RAM desperdiciada.
2. ¿Debo utilizar drop_caches?
Normalmente, no.
Existe el parámetro:
sudo sysctl -w vm.drop_caches=3
que permite al kernel descartar determinadas cachés:
vm.drop_caches=1→ libera page cache.vm.drop_caches=2→ libera objetos recuperables como dentries e inodos.vm.drop_caches=3→ libera ambos tipos de caché.
Sin embargo, esto no es una técnica recomendada para acelerar Linux ni para solucionar un problema normal de falta de memoria.
El kernel ya se encarga de recuperar estas cachés cuando necesita memoria. Al eliminarlas manualmente, podemos conseguir que aumente temporalmente la cantidad de RAM que aparece como free, pero también estamos eliminando información que podría haber sido reutilizada rápidamente.
Si posteriormente una aplicación necesita esos datos, el sistema tendrá que reconstruir las cachés, lo que puede provocar más operaciones de E/S y consumo adicional de CPU.
La documentación oficial del kernel advierte expresamente de que drop_caches puede provocar problemas de rendimiento y recomienda su utilización principalmente para pruebas o depuración.
¿Para qué puede ser útil entonces drop_caches?
Tiene sentido en situaciones concretas, por ejemplo:
- realizar pruebas de rendimiento reproducibles;
- investigar el comportamiento de la gestión de memoria;
- realizar determinadas pruebas de sistemas de archivos;
- depurar problemas específicos.
No debería utilizarse periódicamente simplemente porque free muestre poca memoria libre.
¿Y si el ordenador está realmente lento?
Si el sistema presenta problemas de rendimiento, es mejor investigar qué está consumiendo la memoria en lugar de vaciar las cachés indiscriminadamente.
Podemos empezar comprobando:
free -h
y observar especialmente:
availablebuff/cacheSwap
También podemos utilizar herramientas como:
top
o:
htop
para identificar los procesos que están consumiendo más memoria.
Si available es muy bajo, existe una utilización elevada de swap o algún proceso está consumiendo cantidades anormales de memoria, entonces sí puede existir un problema que merezca investigación.
Resumen
free -m→ Permite consultar el estado de la memoria.watch -n 1 free -m→ Permite monitorizarla en tiempo real.available→ Es una de las cifras más útiles para saber cuánta memoria puede utilizar el sistema.buff/cache→ No debe interpretarse automáticamente como memoria desperdiciada.- Linux recupera automáticamente las cachés cuando necesita memoria.
vm.drop_caches=3→ No es una herramienta general para mejorar el rendimiento.- Vaciar las cachés puede incluso empeorar temporalmente el rendimiento al obligar al sistema a reconstruirlas.
En resumen: en Linux, tener poca memoria free no significa necesariamente tener poca memoria disponible.