By | 4 septiembre, 2012

Free Your Mind Now! 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 dentries e inodos:

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 para bajar los datos en el buffer de memoria a disco y luego los comandos de arriba, por ejemplo:

sync; sysctl vm.drop_caches=3

y esto perfectamente puede ser colocado en el crontab de root o en un script en la carpeta /etc/cron.hourly

Foto de EnvironmentBlog (algunos Derechos Reservados)

3 Replies to “Liberar la memoria en Linux”

  1. Pingback: Bitacoras.com

  2. martin

    Hola, me gustaría saber en qué sistema usaste esta función exitosamente ya que en los dos en que lo probé yo,

    Arch Linux x86_64 kernel 3.6.7 y kernel 3.6.7-liquorix y Ubuntu Server 12.10 kernel 3.5.0-18-generic x86_64

    produce kernel panic indefectiblemente.
    Saludos.

  3. Rodolfo Pilas

    Martín, es raro lo que dices.

    En primer lugar no debería producir un Kernel Panic. Bueno, root puede producir kernel panic de varias formas, pero no escribiendo en el /proc/sys (que yo conozca, al menos).

    En segundo lugar estoy probando en Ubuntu con Linux 2.6.32 amd64 tanto:

    sync; sysctl vm.drop_caches=3

    o tamién

    echo 3 > /proc/sys/vm/drop_caches

    y funciona perfecto, como indica el artículo original.

Responder a Rodolfo Pilas

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