En Linux, cuando la RAM está casi completamente llena, suele haber una preocupación desproporcionada. Muchas personas lo ven como un signo de saturación o mal funcionamiento e inmediatamente intentan liberarla. Sin embargo, esta reacción se basa en un malentendido de cómo funciona el sistema. La RAM en uso es aprovechada intencionadamente por el kernel para mejorar el rendimiento general. Antes de intentar intervenir, es esencial entender qué hace Linux realmente con esta memoria y en qué situaciones puede tener sentido actuar.
1. Comprueba cómo utiliza Linux la RAM
Cuando un usuario consulta el estado de la memoria en Linux, a menudo se centra en la cantidad de RAM que se dice que está en uso. Esta lectura es engañosa si no se pone en contexto. La memoria realmente utilizada por las aplicaciones corresponde a los datos activos necesarios para su funcionamiento inmediato, como el código en ejecución, las pilas y las áreas de trabajo. Junto a esta memoria activa, el sistema mantiene en la RAM un conjunto de datos procedentes del almacenamiento, conocido como caché de disco o caché de páginas. Esta caché contiene archivos leídos recientemente, bibliotecas compartidas e incluso ejecutables para evitar accesos repetidos al disco.
La memoria libre representa la porción de RAM que actualmente no está ni utilizada por procesos ni ocupada por caché. En Linux, esta área se reduce deliberadamente porque la memoria totalmente libre no ofrece ventajas de rendimiento. Precisamente por este motivo, la columna «disponible» es la única realmente relevante. Indica la cantidad de memoria que el sistema es capaz de proporcionar inmediatamente a las nuevas aplicaciones sin causar presión de memoria o un recurso excesivo a la swap. Tiene en cuenta el hecho de que la caché de disco puede liberarse bajo demanda, lo que no se refleja en la simple noción de memoria libre.
Para comprobar las diferentes cantidades de RAM utilizadas en Linux, puede utilizar este comando :
libre -h
Qué hay que tener en cuenta :
- disponible: es la memoria que realmente puede ser utilizada de forma inmediata por una aplicación.
- buff/cache: caché de disco recuperable automáticamente, la memoria se utiliza para acelerar el sistema, pero se libera en cuanto una aplicación la necesita.
En este ejemplo, el sistema tiene aproximadamente 2 GB de RAM. De ellos, 1,2 GB se muestran como utilizados.
La columna libre (aquí en 94 MB) representa la memoria que está totalmente sin usar en ese momento. En Linux, este valor es bajo y esto no es un problema. La RAM totalmente libre no aporta ninguna ganancia de rendimiento y Linux prefiere utilizarla para evitar accesos más lentos y repetitivos al disco duro.

Por ejemplo, cuando un programa escribe datos en el disco duro en Linux, los datos no se escriben inmediatamente en el medio de almacenamiento. El núcleo primero coloca estos datos en la caché de escritura de la memoria RAM. A continuación, la llamada de escritura devuelve rápidamente la mano a la aplicación, lo que mejora la capacidad de respuesta. La escritura física en el disco se realiza más tarde (~5 a 30 segundos por defecto) de forma agrupada y optimizada.
La columna búfer/caché (mostrada aquí como 852 MB) corresponde principalmente a la caché de páginas. Se trata de datos almacenados en memoria para acelerar el acceso al disco, como archivos, bibliotecas o ejecutables utilizados recientemente. Esta memoria no se pierde y puede liberarse inmediatamente si una aplicación la necesita.
2. Aparición de intercambio de discos y ralentización
Unos instantes después, tras abrir todas las aplicaciones que pude encontrar, la situación cambió notablemente. La memoria utilizada aumenta, la caché de páginas disminuye bruscamente y la memoria disponible cae a unos 440 MB. Al mismo tiempo, la swap empieza a ser realmente utilizada, con 1 GB movido al disco. Este cambio es una clara señal de que el sistema está entrando en una zona de presión de memoria.

Este comportamiento ilustra perfectamente la lógica del núcleo Linux. Antes de utilizar la swap, el sistema intenta explotar al máximo la memoria RAM y, cuando este margen ya no es suficiente, algunas páginas poco activas se trasladan al espacio de swap para preservar la estabilidad y la capacidad de respuesta generales.
Es importante señalar que el sistema no muestra signos de saturación crítica, sino una ligera ralentización.
3. La presión de la memoria y lo que el sistema trata de evitar
Cuando la RAM empieza a agotarse realmente, el núcleo mide constantemente lo que se conoce como presión de memoria, es decir, la dificultad creciente de proporcionar RAM a las aplicaciones sin degradar el funcionamiento del sistema. Mientras esta presión se mantenga baja, el núcleo se contenta con liberar automáticamente la caché de disco para responder a las nuevas peticiones.
Cuando la presión aumenta, el sistema activa mecanismos de compensación. El primero consiste en trasladar ciertas páginas de memoria que no se utilizan muy a menudo a la zona de intercambio del disco duro. Esta operación libera memoria RAM, pero tiene un coste importante en términos de rendimiento, ya que el acceso al disco es mucho más lento que el acceso a la memoria RAM. Por lo tanto, la swap no es una optimización, sino una solución de reserva destinada a evitar la congelación del sistema.
Si la presión sobre la memoria llega a ser demasiado grande y ni la liberación de caché ni el intercambio son suficientes, el núcleo puede activar el OOM killer (por Out Of Memory Killer). Este mecanismo se utiliza como último recurso y consiste en detener bruscamente uno o varios procesos para preservar la estabilidad general del sistema. El objetivo no es optimizar, sino evitar una congelación completa de la máquina.
Esta es precisamente la situación que queremos evitar entendiendo correctamente el uso de la RAM. Forzar la liberación de la caché cuando la memoria no está realmente saturada obliga a utilizar el disco duro. Al borrar datos útiles, el sistema tendrá que volver a cargarlos desde el disco.
zRam: comprimir la memoria en lugar de pasarla al disco duro
Cuando la RAM es realmente limitada en máquinas con poca RAM, Zram crea un dispositivo de intercambio en la propia RAM y las páginas de memoria almacenadas allí se comprimen sobre la marcha. Esto significa que se pueden almacenar allí más datos de los que se utilizan en la RAM física, gracias a la compresión. Normalmente se espera un ratio de compresión de alrededor de 2:1 (2GB de RAM lógica contenidos en 1GB de RAM física) a 3:1, o incluso más en algunos casos.
sudo apt install zram-tools -y
Si tienes una CPU decente pero poca RAM, esta es la limitación ideal.
La compresión y descompresión consumen tiempo del procesador, pero éste es mucho menor que el coste de un acceso al disco en sistemas equipados con discos lentos o sometidos a una gran actividad. zram no sustituye a la RAM, pero permite ampliar eficazmente su capacidad aparente cuando la presión de la memoria se hace real.

zram está especialmente indicado para entornos con limitaciones, como ordenadores antiguos, máquinas virtuales ligeras o sistemas integrados. No se trata de una optimización milagrosa, sino de un mecanismo para retrasar el uso del disco de intercambio, limitar las ralentizaciones y evitar situaciones críticas cuando la RAM realmente se agota.
No recomendado: depuración de la memoria caché del kernel
Los comandos manuales de liberación de caché de memoria se presentan a veces como soluciones de optimización. En realidad, sólo deben considerarse como una herramienta experimental o de diagnóstico. Estos comandos no liberan la memoria realmente utilizada por las aplicaciones. Sólo eliminan las cachés que el kernel había construido para acelerar el funcionamiento del sistema.
Estos comandos no son recomendables, no mejoran el rendimiento y no liberan memoria para las aplicaciones. Sólo destruyen cachés que el núcleo había calculado para acelerar el sistema y provocan un aumento de los accesos al disco y de la carga de la CPU.
sync && echo 1 | sudo tee /proc/sys/vm/drop_caches
Este comando sólo borra la caché de los archivos utilizados recientemente.
sync && echo 2 | sudo tee /proc/sys/vm/drop_caches
Esta variante tiene como objetivo los metadatos del sistema de archivos, como dentries e inodes. Puede causar una ligera pérdida de capacidad de respuesta en accesos posteriores al disco.
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
Este último comando combina los dos enfoques y borra todas las cachés recuperables. Este es el método más intrusivo y el que tiene un impacto más inmediato en el rendimiento.
La documentación oficial del núcleo Linux desaconseja su uso fuera de un entorno de prueba o depuración. En uso normal, el núcleo libera automáticamente estas cachés tan pronto como la memoria es realmente necesaria.
En este ejemplo, liberar la caché manualmente supone una ganancia apreciable de memoria disponible de forma inmediata. Después de ejecutar el comando, unos 90 MB de RAM vuelven a ser utilizables. La ganancia es real, pero sigue siendo limitada y debe ponerse en contexto.
Esta memoria liberada no procede de una reducción del consumo de las aplicaciones en ejecución. Corresponde a la eliminación de las cachés que el núcleo de Linux había acumulado para acelerar el funcionamiento del sistema. Estas cachés contenían archivos, bibliotecas e información que ya habían sido calculados para reducir los accesos al disco y mejorar la capacidad de respuesta general.

Como resultado, la apertura del software se vuelve temporalmente más lenta. Los datos que antes estaban disponibles en memoria deben volver a leerse desde el disco, lo que introduce una latencia adicional. Una vez cargados estos archivos, el núcleo reconstruye gradualmente las cachés necesarias para restablecer un funcionamiento óptimo.
A continuación, la memoria RAM se utiliza de nuevo para almacenar esta información, y las optimizaciones eliminadas durante la liberación manual se vuelven a crear a medida que se abre el software y se accede a los archivos. Si esta operación se repite con regularidad, la RAM acaba utilizándose de forma ineficiente. Entonces, la RAM ya no se utiliza como palanca de rendimiento, sino simplemente como una reserva temporal que se vacía y se rellena constantemente.