Liberando memoria RAM, fácil y rápido

Muchos de los que usamos linux, en algún momento necesitamos liberar memoria RAM, por diferentes motivos. en mi caso particular después de varios días de trabajo, con uptime realmente elevado, a pesar de cerrar las aplicaciones, apagar maquinas virtuales o cerrar los navegadores, podemos ver que nuestra memoria “No se librea en su totalidad”.
Es en estas situaciones, que podemos acudir a un par de comandos, que nos permitirán liberar memoria.

$ free -h

Este comando nos permite ver el estado de la memoria antes, el parámetro -h le indica al comando free que muestre los valores en un formato legible para los humanos.

PoC

Podemos ver que tenemos 49GB de memoria libre 😉

sudo sync && sudo sysctl -w vm.drop_caches=3

esta es la linea que hace la magia! (libera la memoria). Más adelante explico en detalles cada  comando.

PoC

volvemos a ejecutar el comando free para verificar si realmente se libero memoria RAM

PoC

LISTO!!! recuperamos casi 7 Gb de memoria RAM.

Explicando algunos conceptos:

sudo sync && sudo sysctl -w vm.drop_caches=3

Esta linea esta compuesta de varios comandos que detallamos a continuación:
1: sudo: Permite ejecutar comandos, como si fuéramos super usuarios.
2: sync: Es usado para forzar el grabado de datos de la cache, muy recomendado antes de desmontar cualquier dispositivo de almacenamiento, como pendrive, cámaras, etc.
3: &&: Es simplemente un conector entre dos comandos de linux. Como bien sabemos existen varios tipos de conectores, aqui una breve explicación para saber cuando usar cada uno.

A; B # Ejecuta A y luego B, sin importar si la ejecución de A fue satisfactoria.
A && B # Ejecuta B solo si la ejecución de A es satisfactoria.
A || B # Ejecuta B solo si la ejecución de A falló.
A & # ejecuta A en background

3: sysctl -w vm.drop_caches=3: le indica al kernel de linux que libere las pagecache, inodos y dentries.

En el directorio /proc/sys/vm/ hay un archivo, drop_caches, donde se define lo que tiene que hacer el kernel con la información “cacheada” en la memoria RAM. Para modificar el comportamiento del kernel de Linux, respecto a la información “cacheada” en la memoria RAM, podemos modificar este valor, teniendo en cuenta las posibles opciones:

0: Opción por defecto, no libera nada.
1: Libera la pagecache
2: Libera inodos y dentries
3: Libera pagecache, inodos y dentries

inodo, en su contexto es una estructura de datos que representa un archivo.
dentries, es una estructura de datos que representa un directorio.
page_cache, podría contener cualquier bloque del disco de almacenamiento asignado a la memoria, como por ejemplo ser el buffer de E/S, o cualquier cosa que el sistema operativo podría mantener en la memoria a partir de un archivo.

Nota: si por algún motivo, intentan volver drop_caches al valor por defecto, obtendrán un error, por lo que pude averiguar el valor 0 (cero) es solo un valor inicial, una ves modificado no es posible asignarle cero, a menos que se reinicie el equipo.

Probado en GNU/Linux Debian 6,7,8 y 9.-

Saludos

Deja un comentario