Como liberar memoria búfer/caché en Linux

Linux utiliza la RAM de manera muy eficiente. A diferencia de Windows, que intenta mantener mucha memoria «libre», el kernel de Linux usa la RAM no utilizada para almacenar datos que podría necesitar en el futuro, como caché de disco y buffers. Esto hace que el sistema sea más rápido, ya que acceder a la RAM es mucho más rápido que acceder al disco.

Tanto la memoria de buffers como la de caché se consideran «disponibles» porque el kernel puede liberarla instantáneamente si un programa necesita más RAM.

  • Buffers: Se usa para almacenar bloques de archivos que están en espera para ser escritos en el disco.
  • Caché: Se usa para almacenar datos de archivos que se han leído recientemente del disco.

Nota: Para el kernel de Linux, la memoria libre es memoria desperdiciada.

Comando free -h

Comprobar el uso de la memoria es tan fácil como escribir lo siguiente en la terminal:

raspberry@pi5:~
$ free -h
               total       usado       libre  compartido   búf/caché   disponible
Mem:           7,9Gi       1,8Gi       323Mi        94Mi       6,2Gi       6,1Gi
Inter:         199Mi          0B       199Mi

El comando free -h te da una visión detallada y precisa de la situación. Te muestra varias categorías de memoria:

  • total: La cantidad total de RAM física.
  • usado: La memoria que está siendo utilizada activamente por los procesos del sistema.
  • libre: La memoria que no está siendo utilizada para nada. En un sistema Linux bien optimizado, este valor suele ser muy bajo.
  • buff/cache: La memoria utilizada para buffers y caché de disco.
  • disponible: Este es el valor más importante para entender la memoria «realmente disponible». Es la memoria "libre" más la memoria de "buff/cache" que el sistema puede liberar rápidamente si es necesario. Es la mejor estimación de cuánta memoria hay disponible para nuevos programas sin usar la memoria de intercambio (swap).

Comando htop

htop adopta un enfoque diferente, a menudo para simplificar la visualización en su barra de progreso. Por lo general, calcula la memoria «usada» de una manera que puede ser engañosa para algunos usuarios.

raspberry@pi5:~
$ htop

Así es como htop desglosa el uso de la memoria:

  • Verde: Memoria usada por procesos de usuario.
  • Azul: Memoria usada para buffers (E/S de disco).
  • Amarillo/Naranja: Memoria usada para caché (archivos de disco).
  • Rosa/Fucsia: Memoria usada por el kernel del sistema.
  • Lila/Magenta: Memoria de swap (si está activado y en uso).

Una barra de memoria llena en htop no siempre significa que tu sistema esté en problemas. De hecho, a menudo indica que Linux está utilizando la memoria RAM de manera muy eficiente.

Liberar Memoria buffer/cache

Hay algunas situaciones específicas donde liberar la caché y los búferes puede ser beneficioso:

  • Entornos con recursos limitados: En sistemas con poca RAM, como una Raspberry Pi o un servidor con poca memoria, liberar la caché de forma manual puede ser una solución rápida para liberar memoria para nuevas aplicaciones o procesos que la necesiten, evitando que el sistema comience a usar el espacio de intercambio (swap) de forma prematura.
  • Pruebas de rendimiento (benchmarking): Si estás realizando pruebas para medir la velocidad de entrada/salida (I/O) de un disco, es crucial que las pruebas se realicen directamente sobre el disco y no sobre los datos que ya están en la caché. Limpiar la caché asegura que cada prueba parta de las mismas condiciones iniciales.
  • Problemas de rendimiento inexplicables: En raras ocasiones, un sistema puede volverse lento debido a que la caché está llena de datos obsoletos o corruptos. Liberar la caché puede ser un paso de diagnóstico para ver si el rendimiento mejora.
  • Después de tareas intensivas en I/O: Si has realizado una tarea que ha consumido muchos recursos, como una copia de seguridad grande o la edición de vídeo, y has notado que el sistema se ha vuelto lento, liberar la caché puede ayudar a que el sistema vuelva a su estado normal más rápidamente.

Es importante recordar, que liberar la caché de forma manual no es una solución a largo plazo para los problemas de rendimiento. El kernel de Linux liberará la caché automáticamente cuando un proceso necesite más memoria. Liberar la caché del sistema puede causar una breve lentitud inicial mientras el sistema vuelve a cargar los datos necesarios en la memoria, sin embargo, no hay riesgo de pérdida de datos. La mayoría de los sistemas Linux gestionan la memoria de forma eficiente por sí mismos, por lo que este tipo de intervención manual solo es necesaria en las situaciones anteriormente descritas.

Recuerda: Forzar esta acción puede causar una ralentización temporal, ya que el sistema tendrá que volver a leer los datos del disco la próxima vez que los necesite, en lugar de acceder a ellos directamente desde la RAM.

Creando el Script

Una vez entendido lo anteriormente descrito, si deseas crear un script para liberar memoria de forma automática, abre una terminal y escribe:

sudo nano /usr/local/bin/liberar_memoria.sh


Pega lo siguiente en la ventana que se abre

#!/bin/bash

# Este script libera la memoria caché del sistema Linux.
# Requiere permisos de superusuario (sudo).

# Muestra el uso de la memoria antes de liberar la caché.
echo "Uso de la memoria antes de liberar la caché:"
free -h
echo "---"

# Sincroniza el sistema de archivos para asegurar que los datos en caché se esc>
sync

# Limpia los cachés de la página, los dentry y los inodos.
# El valor '3' en /proc/sys/vm/drop_caches hace esto.
echo "Liberando la memoria caché..."
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

# Muestra el uso de la memoria después de liberar la caché.
echo "---"
echo "Uso de la memoria después de liberar la caché:"
free -h

echo "Proceso completado."

Ctrl + o para guardar y Ctrl + x para salir

sudo chmod +x /usr/local/bin/liberar_memoria.sh

En este momento puedes ejecutar desde una terminal el script así

raspberry@pi5:~
$ liberar_memoria.sh

Para hacer esto automáticamente, creamos una tarea que se ejecute a las 5.00 a.m horas todos los días y limpie la memoria.

crontab -e

Copiamos y pegamos lo siguiente al final de la línea.

0 5 * * * /usr/local/bin/liberar_memoria.sh >> /home/tu_usuario/freeMen.log 2>&1

Ctrl + o para guardar Ctrl + x para salir

Ahora una vez al dia, a las 5.00 a.m se limpiará la memoria de tu equipo 24/7/365

Ahora sabemos:

Que si tu sistema se vuelve lento, observa la memoria ocupada, (barra llena, color verde), o si la parte lila (swap) empieza a crecer, podría ser una señal de que necesitas controlar mediante un script la liberación de memoria o necesitas comprar más RAM para tu carga de trabajo actual.

Deja un comentario

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

Scroll al inicio