Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

¿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 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

Bibliografía;


Atención: Salvo que se indique lo contrario, la licencia del texto de este documento es Creative Commons Reconocimiento 2.5, mediante la cual usted tiene permitido copiar, modificar, comunicar y distribuir el contenido de este texto, de manera total o parcial, y publicarlo o difundirlo en cualquier otro sitio de Internet o medio de comunicaciòn, siempre y cuando incluya o cite (1)el nombre de este sitio de Internet, (2)enlace permanente de este documento, (3)nombre del autor y (4)la misma licencia de distribución.

Opciones: Imprimir | Recomendar | Enlace permanente

Twitter Facebook Google Bookmarks Bitacoras.com Wikio Menéame Technorati Bloglines Digg Yahoo Buzz

Seguimientos (Trackback)

URL de seguimiento para esta entrada:
http://www.alcancelibre.org/trackback.php/como-limpiar-caches-memoria-gnulinux
Agregar comentario

Los siguientes comentarios son de la persona que los haya enviado. Este sitio se deslinda de cualquier responsabilidad respecto de las opiniones expresadas por los participantes en nuestros foros y secciones de comentarios, y el hecho de publicar las mismas no significa que se esté de acuerdo con éstas.

  • ¿Cómo limpiar los caches de memoria en GNU/Linux?
  • Escrito por:Will Lpz Jimnz el  10/08/2010, 21:51

Este guion podria usarse de igual forma en servidores como Squid o Fiewall ??

---
.:: Cuando el Alumno esta listo, el maestro aparece ::.
[[http://www.koalasoftmx.net ::BLog::]]

  • ¿Cómo limpiar los caches de memoria en GNU/Linux?
  • Escrito por:Joel Barrios Dueñas el  10/08/2010, 23:07

Si, si puedes usarlo.

---
--
Joel Barrios Dueñas.
Director General Alcance Libre, A.C.
http://www.AlcanceLibre.org/
La libertad del conocimiento al alcance de quien la busca.

  • ¿Cómo limpiar los caches de memoria en GNU/Linux?
  • Escrito por:Anonymous el  11/08/2010, 00:04

Se supone que el cache se limpia solo. Es decir, si se lanza un proceso y no hay memoria suficiente se libera del cache. Es por eso que la memoria cache se considera memoria libre.

  • ¿Cómo limpiar los caches de memoria en GNU/Linux?
  • Escrito por:Joel Barrios Dueñas el  11/08/2010, 00:51

Efectivamente, el cache suele limpiarse solo, sobre todo si utiliza vm.swappiness=10 u otro valor menor. Sin embargo, hay casos donde el cache no se limpia del todo o por lo menos no tan rápido como uno quisiera y donde el usuario probablemente quiera limpiar el cache de de modo inmediato para utilizar algún otro programa.

La máquina donde compilo y pruebo paquetería para ALDOS/AL Server y genero las imágenes ISO es un buen ejemplo.

Sugiero lo intentes en un equipo que utilices a diario. Navega un rato, sobre todo sitios con flash, abre OpenOffice.org, edita un par de imágenes con Gimp y otras tareas que se te ocurran. Cierra Firefox, OpenOffice, Gimp y lo que se te ocurra. Examina con free -m o free -k el uso de memoria de tu sistema. Limpia el cache como describo en este artículo y vuelve a utilziar free -m o free -k. Probablemente notes una enorme diferencia.

---
--
Joel Barrios Dueñas.
Director General Alcance Libre, A.C.
http://www.AlcanceLibre.org/
La libertad del conocimiento al alcance de quien la busca.