Jul 14, 2009

Liberar la memoria RAM cacheada en Linux

Existen numerosas aplicaciones que cachean datos en la memoria RAM, es decir, dejan información almacenada de forma permanente en este tipo de dispositivo.

Esta práctica puede llegar a ser contraproducente, ya que si un sistema se queda sin memoria RAM comienza a emplear memoria swap, situación que debería ser evitada en la mayoría de los casos.

A partir del kernel 2.6.16 se introdujo la posibilidad de actuar sobre esa información cacheada en la memoria RAM. Para ello se tiene un fichero denominado /proc/sys/vm/drop_caches que es utilizado por el kernel para saber qué debe hacer con esos datos en función del número que se escriba en dicho fichero:
  • 0: No hacer nada.
  • 1: Liberar la pagecache.
  • 2: Liberar inodos y dentries.
  • 3: Liberar pagecache, inodos y dentries.
La pagecache es la memoria caché de páginas. Los inodes es la representación que utiliza el sistema operativo para los ficheros y directorios guardados en memoria o disco (un inodo contiene todos los metadatos necesarios para administrar objetos en el sistema de ficheros, incluyendo las operaciones que sean posibles sobre él). Y por último, los dentries se utilizan para mantener la relación entre los directorios y los ficheros, así como para realizar la traducción entre los nombres y los inodos.

Por lo tanto, si quisiéramos liberar la pagecache, los inodos y los dentries ejecutaríamos el siguiente comando:
# sync ; echo 3 > /proc/sys/vm/drop_caches

Se recomienda ejecutar previamente el comando sync para forzar la grabación en la caché de aquellos datos que pudieran estar pendientes.

1 comment: