Liberar o limpiar cache de la Memoria RAM.

En los sistemas operativos  que utilizan el Kernel de Linux existe una manera de limpiar la memoria cacheada en la RAM, que es información que está ahí por si hace falta, pero que no tiene por qué necesariamente estar ahí, es totalmente prescindible.

Apache es una aplicación que utiliza mucho ese tipo de memoria, y claro, en un servidor web puede provocar que se utilice más RAM de la cuenta y puede provocar problemas no deseados como el empezar a paginar, que no es otra cosa que empezar a utilizar el disco duro con información que debería estar en RAM y como la velocidad de acceso a disco es muy inferior al acceso a RAM pues el equipo puede parecer que se ha quedado “colgado”, de forma que ni siquiera podamos llegar a loguearnos en el mismo.

Otro ejemplo es el navegador web Firefox, el cual consume mucho la memoria, sin que tengamos una pagina abierta con muchos contenidos.

Pero en el kernel 2.6.16 se introdujeron cambios y gracias a estos cambios la solución es muy sencilla, en el directorio /proc/sys/vm/ tenemos un fichero llamado drop_caches que es el encargado de decirle al kernel qué hacer con esa información que está en memoria, por defecto se permite el utilizar este tipo de memoria, pero para reducir RAM nos puede interesar que el kernel actúe de otra manera, modificando el valor del fichero con los siguientes valores:

* 0: No libera nada.
* 1: Libera la pagecache.
* 2: Libera inodos y dentries.
* 3: Libera pagecache, inodos y dentries.

La pagecache es la memoria la caché de páginas, un inodo es la representación de ficheros y directorios en memoria y las dentries son las entradas de directorio, componentes de un path, todos estos valores en RAM.

Para liberar podemos ejecutar estos comandos como root o con un sudo delante:

$ sudo su

# echo 1 > /proc/sys/vm/drop_caches

esto libera la pagecache.

# echo 2 > /proc/sys/vm/drop_caches

esto libera inodos y dentries.

# echo 3 > /proc/sys/vm/drop_caches

esto libera todo pagecache, inodos y dentries.

Y por supuesto seria mala idea hacer esto de vez en cuando vía una entrada en el cron de root con un crontab -e con lo siguiente:

# crontab -e

Atentos no confundamos la almohadilla con superusuario estas dos lineas tal y como están ponerlas abajo del texto.

#Entrada para limpiar la cache en memoria
3,18,33,48 * * * * sync; echo 3 > /proc/sys/vm/drop_caches

El sync que se pone antes es para asegurarnos que todos los objetos cacheados son liberados y es muy recomendable ponerlo siempre.