martes, septiembre 04, 2012

Liberar la memoria en Linux

Tomado de: Articulo Original

Me ha sucedido en Linux que a pesar de bajar aplicaciones, la memoria sigue estando ocupada, como si no se liberara. Este comportamiento busca lograr un mejor uso de la memoria dejando cargadas las aplicaciones recientes.
 
En principio lo que se describe en este artículo no es algo que deba preocupar a la mayoría de los usuarios, ya que el kernel se encargará de administrar la memoria y de manejar estos datos cacheados; pero puede darse la situación (me ha pasado varias veces) que se necesita memoria libre y no se puede esperar por el kernel, así que aquí describo el procedimiento para liberar la memoria.

A partir del kernel 2.6.16 hay una forma de decirle al kernel que limpie esa memoria que mantiene en cache. Para esto se utiliza el archivo /proc/sys/vm/drop_caches que generalmente tiene un cero si lo desplegamos.

Para liberar paginas en cache, como root ejecutamos:
sysctl vm.drop_caches=1
Para liberar dintries en cache,
sysctl vm.drop_caches=2
Para liberar páginas de cache, dentries e inodos:
sysctl vm.drop_caches=3
Cuando ejecutamos estos comandos se cambia el número cero por el número que pasamos y, apenas el kernel libera la memoria, vuelve a restaurar el cero.
Lo ideal es ejecutar sync primero y luego los comandos de arriba, por ejemplo:
sync; sysctl vm.drop_caches=2
y esto perfectamente puede ser colocado en el crontab de root o en un script en la carpeta /etc/cron.hour

No hay comentarios: