cyb3rpunk

Liberar memoria RAM caché en GNU/Linux

Posted in GNU/Linux, linux, Tips by ramonovski on abril 28, 2011

La memoria caché es aquella que almacena información de los procesos con el objetivo de ser reutilizada para lograr que se lleven a cabo procesamientos futuros de manera casi instantanea. Linux por sí mismo almacena esta memoria y la reutiliza cuando es requerida, pero tambien la libera cuando otro proceso requiere memoria RAM.

En Linux, desde la versión 2.6.16 del Kernel es posible para el usuario «administrar» la liberación de la memoria caché mediante el archivo /proc/sys/vm/drop_caches

 

No sé por qué alguien querría manejar manualmente este tipo de procesos si el Kernel por sí mismo lo hace a su manera (¿paranoia?) y nunca he sabido de algún inconveniente debido a esto.
Lo única ventaja que se me ocurre de realizar esto es para hacer una especie de «refresh» sin tener que reiniciar el Sistema; cerrar todas las aplicaciones y darle prioridad a aplicaciones que se vayan ejecutando en cierto orden. Y no estoy seguro que tenga que recurrirse a esto para lograrlo, pues al abrir una aplicación que requiera memoria, Linux se encargará de liberarla para darle prioridad a la nueva aplicación que lo requiera.

 

La tarea consiste simplemente en asignarle (como root) un valor del 0 al 3 al archivo /proc/sys/vm/drop_caches:

echo 0|1|2|3 > /proc/sys/vm/drop_caches

El significado de cada valor:

  • 0 » Cede el control al Kernel para que administre la memoria
  • 1 » Libera pagecache
  • 2 » Libera dentries y inodes
  • 3 » Libera pagecache, dentries y inodes

 

Donde:

pagecache: Memoria caché de la paginación.
dentries: (Directory Entries) Representa la relación de forma estructurada que existe entre directorios-archivos.
inodes: Son nodos índice de archivos y directorios que usa el Sistema de Archivos para administrar las actividades posibles de dichos archivos y directorios guardados en disco o memoria. Contiene la metadata de los archivos y directorios: permisos, tamaño, propietario, última fecha de acceso, creación, modificación, etc…

 

Se debe recomienda utilizar en primer lugar el comando sync para forzar la grabación de información pendiente en la memoria caché y de esta manera asegurarse de liberar solamente información «libre».

sync ; echo 0 > /proc/sys/vm/drop_caches
sync ; echo 1 > /proc/sys/vm/drop_caches
sync ; echo 2 > /proc/sys/vm/drop_caches
sync ; echo 3 > /proc/sys/vm/drop_caches

 

Fuentes:

http://www.linuxinsight.com/proc_sys_vm_drop_caches.html
http://redes-privadas-virtuales.blogspot.com/2009/07/liberar-la-memoria-ram-cacheada-en.html

:wq

Tagged with: , ,

10 respuestas

Subscribe to comments with RSS.

  1. gnusosa said, on abril 29, 2011 at 9:35 am

    Te vas a ir al infierno si sigues jugando a las manitas calientes con /proc …

  2. Exe U. said, on May 1, 2011 at 6:24 pm

    Muy interesante. Util cuando sabes que vas a abrir un programa pesado solo una vez o cuando esta muy cargada.

    Para quien no sepa, con el comando free -m se puede visualizar el uso de la cache.

    Salu2

  3. nelson said, on julio 3, 2011 at 3:38 pm

    Hola a todos, estoy teniendo serios problemas en mi archlinux y la memoria cache, con estos comandos lo he solucionado, pero resulta que lo tengo que repetir cada cierto tiempo y mas aun cuando estoy copiando de una memoria USB a la pc, existe alguna forma de ponerle un limite a este memoria o hacerle algo?, a causa de esto la pc se me esta colgando y tengo 2 GB de ram, asi que no creo que el motivo ande por poca memoria.
    Saludos y cualquier sugerencia sera bien recibida.

    • ramonovski said, on julio 5, 2011 at 1:56 pm

      No entiendo lo de «ponerle un límite a este memoria».

      Intenta pasándole el valor «0» a /proc/sys/vm/drop_caches para que el Kernel tome el control de la memoria.

      Verifica que tengas la swap activada, lanza «free -m» y mira la fila de «swap», si no está activada, lanza «swapon -a».

      Ejecuta «cat /proc/sys/vm/swappiness» para verificar el valor swapiness que tiene tu kernel, 60 es el valor «ideal».

      Intenta incrementando la memoria compartida (shm): https://wiki.archlinux.org/index.php//dev/shm

    • Carlos said, on septiembre 7, 2011 at 9:35 am

      Hola, dime lograste solucionar tu problema de saturación de RAM, si lo has logrado podrías explicarme como lo hiciste porque estoy teniendo el mismo problema con uno de mis servidores debían 6

      • nelson said, on septiembre 7, 2011 at 10:19 am

        Hola carlos, no, no lo logré, tambien que dejé (por ahora) de utilizar ArchLinux (que era donde tenñia este problema), con la opción que aparece en este blog funciona, pero de forma temporal, seguí el consejo de @ramonovski y todo esta correcto. Lo que puedo pensar es que sea un error o algo mal del kernel que yo puse, tal vez con las nuevas actualizaciones esto no pase, no he probado.

        Puede que una tarea en el cron que ejecute este comando cada cierto tiempo sea una alternativa, habría que probar o que los mas experimentados comenten.

        Saludos

      • Carlos said, on septiembre 9, 2011 at 10:57 am

        Bueno a mi me esta pasando con un servidor en producción. Instalé debían 6, con lenny andaba todo bien, pero ahora con debían 6 tengo problemas en Liberar la pagecache, esta crece hasta saturar mi RAM.

  4. […] http://cyb3rpunk.wordpress.com/2011/04/28/liberar-memoria-en… http://www.linuxinsight.com/proc_sys_vm_drop_caches.html […]

  5. Luis Meneses said, on May 11, 2014 at 11:35 am

    pana cual es la contraseña sudo?¿?
    me dice esto cuando pongo los comandos:
    [sudo] password for canaima..


Replica a ramonovski Cancelar la respuesta