Programacion Linux

¿Cómo limpiar los caches de memoria en GNU/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 ficheros utilizando nodos índices (inodos o inodes) usualmente derivados de un sistema de ficheros 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 ficheros, 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 orto
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 fichero /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
fichero 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

 

Bibliografía;

Fuente: AlcanceLibre

¿Te resultó interesante? Compártelo ...



GUTL

Publicado por GUTL

Forma parte de GUTL desde el 6 diciembre, 2011.

Este artículo tiene 3 comentarios

  1. Saludos. A mi me pinchó a comandos, por supuesto obviando los
    /bin
    /sbin
    Sin embargo, al escribir el script y ubicarlo en /usr/bin
    le dí permisos 777 y me devuelve lo siguiente:
    error: «wm.drop_caches» is an unknown key
    Espero que los gurús nos tieren un cabo…
    Saludos

Los comentarios están cerrados.