Cómo Liberar Memoria RAM y Swap en Linux

Introducción

La gestión de la memoria es un aspecto fundamental en Linux, sobre todo si usas tu equipo para tareas intensivas, como virtualización, edición de video o videojuegos. Cuando se agota la memoria RAM, el sistema comienza a usar la memoria de intercambio (Swap), lo que puede ralentizar todo el entorno. En este artículo, profundizaremos en cómo liberar memoria RAM y Swap, automatizar estos procesos y optimizar el rendimiento general de tu sistema.

Si necesitas una guía más sencilla de liberación puntual de Swap, te recomendamos revisar nuestro post anterior: Liberar la Swap (memoria de intercambio) en Linux desde la terminal. Aquí daremos un paso más y exploraremos configuraciones avanzadas, scripts de limpieza automatizada y el uso de herramientas como zram, Preload y la edición de parámetros en /etc/sysctl.conf.

RAM Linux

1. Cómo Funciona la Memoria en Linux

1.1 RAM y Swap

En un sistema Linux, la RAM es la memoria principal donde se cargan los procesos en ejecución. Cuando esta se llena, el kernel recurre a la Swap para almacenar parte de los datos que no se usan de forma inmediata. La Swap puede ser una partición o un archivo especial en tu disco. Usar la Swap es más lento que usar la RAM, por lo que un sistema con mucha actividad en Swap puede experimentar bajones de rendimiento e incluso puede que sea más perjudicial que beneficioso en ciertos escenarios.

1.2 vm.swappiness

El parámetro vm.swappiness determina cuán agresivo es el kernel al mover datos de la RAM a la Swap. Se encuentra en /proc/sys/vm/swappiness y su valor por defecto en la mayoría de distribuciones suele rondar 60. Cuanto más alto el valor, más rápido Linux descarga procesos a Swap; cuanto más bajo, Linux agota primero la RAM.

  • Ejemplo:
    • vm.swappiness = 10 -> Linux retrasa bastante el uso de Swap.
    • vm.swappiness = 60 -> Comportamiento más equilibrado (suele ser el defecto).
    • vm.swappiness = 90 -> Forzará mucho el uso de Swap, no siempre recomendable.

Estos valores se pueden modificar desde la terminal. Si queremos hacer pruebas para ver cómo se comporta sin que esto sea definitivo, podemos usar el siguiente comando de ejemplo, con un 10:

sudo sysctl vm.swappiness=10

Para que el cambio sea permanente, abre la terminal y añade o modifica en /etc/sysctl.conf:

vm.swappiness=10

2. Liberar Memoria RAM en Linux: Métodos Básicos

2.1 Liberar Caché de Páginas y Buffer

Linux usa parte de la memoria como caché para acelerar el acceso a archivos. Normalmente no hace falta “liberarla” manualmente, pues el kernel la gestiona de forma inteligente. Sin embargo, en situaciones específicas (scripts de testing o entornos de producción con picos de uso), podríamos forzar esta limpieza.

sudo sync
sudo sysctl -w vm.drop_caches=3
  • sync sincroniza la caché de disco antes de liberar.
  • vm.drop_caches=3 elimina cachés de página, inodos y dentries.

¡Ojo! Hacer esto constantemente puede afectar el rendimiento, ya que estás vaciando información que acelera la lectura de datos. Empléalo únicamente si sabes que es necesario.

2.2 Liberar Swap Manualmente

Tal como explicamos en nuestro artículo anterior, basta un par de comandos para mover de nuevo los datos de Swap a la RAM (si hay espacio suficiente en la RAM):

sudo swapoff -a
sudo swapon -a

Este método desactiva por completo la Swap y luego la reactiva, vaciándola. Nuevamente, úsalo con precaución, pues si no dispones de suficiente RAM libre, puedes forzar a tu equipo a matar procesos o congelarse. Si el sistema ha empezado a usar memoria Swap, es debido a que le quedaba muy poca memoria RAM disponible, razón por la que quizá puede que sigamos sin tener disponible más memoria RAM.


3. Automatizar la Limpieza de Memoria RAM y Swap

Si te ves obligado a liberar memoria con frecuencia, podemos optar por automatizar el proceso. Existen varias formas de hacerlo.

3.1 Scripts en Bash

Un script básico que primero sincroniza, luego libera cache y, finalmente, vacía la Swap podría ser:

#!/bin/bash
# liberar_memoria.sh

# 1. Sincroniza los buffers
sync

# 2. Limpia la caché
sysctl -w vm.drop_caches=3

# 3. Vacía la Swap (si la RAM lo permite)
swapoff -a && swapon -a

echo "Memoria y Swap liberadas."

Dale permisos de ejecución:

chmod +x liberar_memoria.sh

Ejecuta con sudo ./liberar_memoria.sh cuando lo necesites, o bien prográmalo para que se ejecute de forma periódica.

3.2 Usar crontab

Para ejecutar el script a una hora fija (ej. todos los días a las 2:00 am):

sudo crontab -e

Agrega la línea:

0 2 * * * /ruta/a/liberar_memoria.sh

Crontab se encargará de ejecutarlo automáticamente cada día a esa hora. Esto puede ser útil por ejemplo si tenemos un servidor casero en Linux que procesa mucha carga en ciertas horas, y queremos liberarlo por la madrugada.

3.3 systemd-timers

Las distribuciones modernas usan systemd. En lugar de cron, podemos crear un servicio y un timer. Resumen de pasos:

  1. Crea un archivo de servicio liberar_memoria.service.
  2. Crea un timer liberar_memoria.timer que indique cuándo arrancar el servicio.
  3. Activa el timer: sudo systemctl enable --now liberar_memoria.timer

Esto brindará un mayor control sobre logs, repetición, etc. y una integración más estrecha con systemd.


4. Ajustes Avanzados de Optimización

4.1 Preload

Preload es un demonio que “aprende” qué aplicaciones usas con más frecuencia y precarga sus librerías en la RAM para mejorar el tiempo de arranque. Aunque no “libera” memoria como tal, puede optimizar su uso. Para instalarlo en Debian/Ubuntu:

sudo apt update
sudo apt install preload

Preload trabaja en segundo plano sin apenas configuración adicional, así que puede ser una buena alternativa a tener en cuenta.

4.2 zram

zram comprime parte de la RAM para aumentar la memoria disponible de manera virtual. Actúa como un disco de Swap pero reside en la propia RAM, aprovechando la compresión. Esto puede ser útil en equipos con poca RAM real.

Pasos generales:

  1. Instalar el paquete zram-tools o similar en tu distro.
  2. Configurar cuánta RAM quieres dedicar a la compresión.
  3. Habilitar zram y comprobar que aparezca como Swap comprimida en /proc/swaps.

4.3 vm.swappiness y vm.vfs_cache_pressure

  • vm.swappiness: Como mencionamos, ajusta en /etc/sysctl.conf si quieres que tu sistema use la Swap con más (o menos) frecuencia.
  • vm.vfs_cache_pressure: Controla cuánto insiste Linux en mantener el caché de metadatos del sistema de archivos. Un valor muy alto puede liberar memoria con frecuencia, pero ralentizar el acceso a disco.

Conclusión

Liberar memoria RAM y Swap en Linux implica más que ejecutar unos cuantos comandos ocasionales. Es fundamental configurar parámetros como vm.swappiness, usar scripts automatizados en herramientas como cron o systemd, y considerar soluciones como zram o Preload, que pueden marcar una diferencia significativa en el rendimiento del sistema. Además, monitorear regularmente el consumo de memoria y revisar procesos que puedan estar causando fugas o mal uso de recursos es esencial. Si tu sistema empieza a ralentizarse por un uso excesivo de Swap, implementar estrategias de limpieza automatizadas puede ser una solución temporal, pero a largo plazo es importante evaluar la posibilidad de añadir más RAM física o ajustar los procesos que están consumiendo memoria de forma desproporcionada.

Para un enfoque más rápido, no olvides la guía básica sobre Liberar la Swap (memoria de intercambio) en Linux desde la terminal. ¡Esperamos que estos consejos te ayuden a mantener tu sistema ligero y fluido!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *