Liberando la memoria Cache

Introducción

Hace ya un tiempo que Miquel Mayol, comentó sobre lo que sucedía con la memoria RAM y la memoria Caché. Y es que efectivamente, y tal y como él comentaba, en mi máquina tras un par de días de uso continuado, he llegado a la siguiente situación:

0140_atareao@zorita: -home-atareao

Y es que conforme va pasando el tiempo, se va “ocupando” toda la memoria RAM, y no se vacía, y la máquina, poco a poco se va ralentizando. Miquel Mayol proponía vaciar la memoria.

Liberando la memoria CACHE

En el directorio /proc/sys/vm/ hay un archivo, drop_caches, donde se define lo que tiene que hacer el kernel qué hacer con la información “cacheada” en la memoria RAM. Para modificar la actuación del kernel de Linix, respecto a la memoria RAM podemos modificar este valor, teniendo en cuenta las posibles opciones:

  • 0: No libera nada
  • 1: Libera la pagecache
  • 2: Libera inodos y dentries
  • 3: Libera pagecache, inodos y dentries

Antes de utilizar cualquiera de las opciones, es importante utilizar “sync”, para, de esta manera, estar seguros, de que todos los objetos que están cacheado están liberados, de otra forma podría haber problemas.

Para hacer estas operaciones tenemos que ser administrador. Con todo ello la sistemática sería algo así como lo que se indica a continuación:

sudo su
sync
echo 3 > /proc/sys/vm/drop_caches
exit

Una alternativa más interesante a ésta es utilizando los siguientes comandos, que finalemnte son los que yo he utilizado en el script:

sbin/sysctl vm.drop_caches=3

El resultado es el siguiente:

0061_atareao@zorita: -home-atareao

Sin embargo, y después de leer Racker Hacker, sobre este asunto, me quedé incluso más confundido. En este punto se comenta de una posibilidad para corregir este problema mucho más segura, y es modificar la variable /proc/sys/vm/vfs_cache_pressure, para indicar al kernel la prioridad que tiene que tener en referencia a la liberación de cache. En LinuxInsight, explican el rango de valores. Pero lo podemos resumir como que a mayor valor de este parámetro menos caché se tendrá almacenada. El valor por defecto es 100, valores por encima de este valor, lo que indica al kernel es que quieres liberar mas memoria caché.

He estado probando con un valor de 10000, tal y como indica en Racker Hacker, pero aún así seguía aumentando el uso de la memoria cache conforme pasaban las horas. Para modificar este parámetro, simplemente ejecutaremos los siguientes comandos en la terminal:

sudo su
echo 10000 > /proc/sys/vm/vfs_cache_pressure
exit

El script

Con todo esto, he implementado un sencillo script, para probar su comportamiento, y que lo que hace es comprobar cada 10 segundos, el porcentaje de memoria usada y de memoria cache, de forma que si la suma de memoria usada y memoria cache son superiores al 90% siempre que la memoria cache sea superior al 15%, o cuando la memoria usada sea superior al 95% o cuando la memoria cache sea superior al 30%, se realicen una liberación de memoria.

Lo he estado probando durante días, y siempre se me ha dado cuando la memoria era superior al 95%, no en el resto de casos. Ahora lo probaré habiendo modificado el parámetro /proc/sys/vm/vfs_cache_pressure, a ver como se comporta.

Puedes descargar el script y probarlo desde aquí:

[wpfilebase tag=file id=96]

Conclusión

Hasta que no lo comentó Miquel Mayol, no había observado este comportamiento, desde entonces lo he estado siguiendo, y con este sencillo script funciona razonablemente bien, manteniendo el uso de la memoria cache, en valores razonablemente bajos. No se como se comportará solo con /proc/sys/vm/vfs_cache_pressure, es cuestión de seguir su comportamiento, a ver si llegamos a alguna conclusión razonable.

Vía | mitcoes, Scott Klarr Jr.
Más información | LinuxInsight, Racker Hacker

  • the one

    por fin hermano gracias quisiera que por favor lo siguieras modificando para hacerlo  sin la ayuda de python.

  • Gracias por la mención, y muchas gracias por el “curro” que te has dado el mérito de la solución manual primitiva es de Scott Klarr.

    Casi me han tomado por loco en Ubuntu brainstorm y en Sabayon bugs y eres el único que me ha hecho caso, o sea que el mérito, todo tuyo.

    Lo del intervalo de chequeo podría ser más largo.

    Tú que sabes programar, convertir este script – cuando tengas la versión final beta, – entiendo por lo que dices que esta es alpha – en paquetes para su instalación supongo que no te sería muy difícil, así lo añades a tu PPA y se puede compartir este mérito tuyo con la comunidad.

  • ismael

    Para hacerlo

  • ismael

    Para hacerlo persistente el parametro y que cuando reinicies no haya que volver a ejecutar el script, habría que editar el fichero:
    /etc/sysctl.conf
    y añadir esta linea:
    vm.drop_caches = 3
    o editarla si ya existe y ponerla el ‘3’

    http://linuxtargz.blogspot.com

  • Invitado

    Genial!!!

  • Luis

    Hola como se utiliza el script  y como haver que arranque al inicio para probarlo, ya lo tengo descargado.
    Gracias

  • Trastetes

    hola referente a como utilizar el script ya esta resuelto, lo he encontrado en la siguiente pagina http://www.atareao.es/ubuntu/conociendo-ubuntu/acelerando-linux/

    Gracias

  • Fredys Fonseca

    gracias pude solucionar un problema grabe en mi empresa cada dos dias se bloqueaba el puto