#Tips – Limpiar cache de la Memoria RAM en #Linux

Es común que luego de varias horas de trabajo y muchas aplicaciones abiertas, el sistema comience a tornarse un poco lento debido a toda la memoria acaparada por el cache. La mayoría de los usuarios que hacen un uso extensivo del sistema suele reiniciar éste, sin embargo hay una forma bastante sencilla de limpiar los caches del sistema sin necesidad de reiniciar.
Introducción.

Es posible obligar al sistema a vaciar los caches cambiando temporalmente el valor de /proc/sys/vm/drop_caches. El parámetro vm.drop_cache tiene cuatro posibles valores:

0 – El sistema opera normalmente haciendo uso de los caches.

1 – Se obliga al sistema a vaciar las páginas del cache (pagecache).

2 – Se obliga al sistema a vaciar las entradas de directorios (dentries) y nodos índice (inodos).

3 – Se obliga al sistema a vaciar las páginas del cache (pagecache), entradas de directorios (dentries) y nodos índice (inodos).

Las páginas del cache a veces son denominadas de manera ambigua como cache de disco y consiste en un almacenamiento previo (buffer) transparente de páginas en la memoria principal de un sistema operativo y son utilizadas para un más rápido acceso a los programas y aplicaciones recientemente utilizados.

El núcleo de Linux supervisa los archivos utilizando nodos índices (inodos o inodes) usualmente derivados de un sistema de archivos de bajo nivel desde nodos índice en el disco.

Un nodo índice puede tener varios nombres y es por ésto que existe un nivel de entradas de directorios (dentries) que representan las rutas e el sistema de archivos, acelerando las operaciones de búsqueda.
Procedimiento

Muchos usuarios cambian el valor de vm.drop_caches cambiándose a root y utilizando el mandato echo para cambiar éste.

su -l
echo “3” > /proc/sys/vm/drop_caches

Puede hacerse exactamente los mismo, de forma más simple, utilizando el mandato sysctl. el procedimiento requiere primero utilizar el mandato sync a fin de escribir en el disco duro cualquier consignación (commit) pendiente. De modo tal, puede realizarse lo siguiente:

su -l
/bin/sync
/sbin/sysctl -w vm.drop_caches=3

Omitir utilizar el mandato sync puede ocasionar se pierdan datos en memoria (documentos y datos en general) recién modificados que normalmente se hubieran escrito en el disco duro.

Una vez realizado lo anterior, es importante volver a dejar el valor 0 de vm.drop_caches a fin de que el sistema vuelva a operar normalmente (algo que omiten la mayoría de los documentos disponibles en Internet), siendo que de otro modo el sistema se tornaría lento e ineficiente pues dejaría de hacer uso de la memoria y utilizará directamente el disco duro para lo que involucra caches.

/sbin/sysctl -w v.drop_caches=0

Para efectos prácticos, conviene utilizar el mandato free a fin de comparar el antes y el después de vaciar los caches:

su -l
/bin/free -m
/bin/sync
/sbin/sysctl -w vm.drop_caches=3
/bin/sleep 3
/sbin/sysctl -w vm.drop_caches=0
/bin/free -m

El procedimiento se puede poner en como tarea programada en el archivo /etc/crontab a fin de hacer una limpieza de caches cada cierto tiempo. Afortunadamente el núcleo de Linux tiene un muy buen manejo de memoria y solo es necesario limpiar caches en situaciones de poca memoria RAM y trabajo extensivo que involucrá aplicaciones muy demandantes en cuanto a recursos de sistema. Sugiero poner el siguiente contenido en un nuevo archivo denominado /usr/local/bin/limpiar_caches.sh y solo utilizarlo cuando verdaderamente sea necesario:

#!/bin/bash

/bin/sync
/sbin/sysctl -w vm.drop_caches=3
/bin/sleep 3
/sbin/sysctl -w vm.drop_caches=0

Deja un comentario

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

*