This is an old revision of the document!
Table of Contents
Optimización / Liberación de memoria RAM en GNU/Linux
Enlace a la documentación oficial del Kernel: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Conceptos básicos sobre la memoria RAM / Paginación / Procesos: nociones_basicas_sobre_la_memoria
Optimización
Swappiness
Swappiness es una propiedad del Núcleo Linux que permite establecer un balance entre el uso del Espacio de intercambio (swap en inglés) y la Memoria de acceso aleatorio (RAM). El swappiness puede tomar valores desde el 0 hasta el 100. Si se establece 0 el núcleo intentará no hacer intercambio, mientras que si se establece 100 el sistema intentará mantener la Memoria de acceso aleatorio lo más libre posible haciendo intercambio. Es algo que en la actualidad no tiene demasiado sentido optimizar ya que no suele ser utilizada gracias al tamaño de las memorias ram actuales. El valor a fecha de este artículo que usan casi todos los kernels de las distribuciones más populares es de 60.
Configuración del Swappiness
Se puede establecer el valor del swappiness modificando el valor del archivo /proc/sys/vm/swappiness. Si por ejemplo, se quisiera establecer su valor a 30, se puede lograr como administrador con la siguiente orden.
Si queremos hacer inmediato el cambio ejecutamos
sysctl -w vm.swappiness=30 #echo 30 > /proc/sys/vm/swappiness sync swapoff -a swapon -a
Este efecto dura mientras es sistema esté activo. Para que el cambio sea permanente, se establece el valor de la variable vm.swappiness en el archivo /etc/sysctl.conf (Obsoleto en algunas distribuciones) o bien /etc/sysctl.d/99-sysctl.conf (Actualmente).
vm.swappiness=30
Cache pressure
La variable del kernel vfs_cache_pressure controla la tendencia del kernel a introducir en memoria RAM bloques de datos) frente a la llamada pagecache o cache de disco (Inodos y dentries), algo mucho más importante para el funcionamiento del sistema. El valor por defecto es 100, indicando que da mucha más prioridad a esta última, cosa razonable debido a su importancia. Ahora bien, para un uso de escritorio donde se requiera trabajar con ficheros grandes (Vídeos full/ultra-HD, imágenes ISO, imágenes a gran resolución, etc) y se tiene una cantidad de RAM razonable (> 8Gb) se puede modificar ese valor para mejorar la carga de dichos ficheros. Un valor de 65 es muy razonable, dará la misma prioridad a los dos tipos de cache y se notará que los vídeos cargan antes, las descompresiones son más rápidas, etc.
Configuración del Cache pressure
Para ejecutar el cambio con efecto inmediato.
sysctl -w vm.vfs_cache_pressure=65
Si queremos hacer inmediato el cambio ejecutamos el siguiente comando.
vm.vfs_cache_pressure=65 #echo 65 > /proc/sys/vm/vfs_cache_pressure
Limpiar / vaciar memoria RAM en Linux
Liberar la memoria ram puede ser útil en determinados casos el manejo de la memoria por parte del kernel no es la más satisfactoria. Por ejemplo, cuando hay muy poca memoria y se necesita liberar espacio, eso se hace por medio de la variable vm.drop_caches.
Valores que puede tomar vm.drop_caches:
- 0 No libera nada y cede el control al Kernel
- 1 Libera pagecache.
- 2 Libera dentries y inodes.
- 3 Libera pagecache, dentries y inodes.
Liberar paginas de cache de disco.
sysctl vm.drop_caches=1
Liberar dentries e inodos.
sysctl vm.drop_caches=2
Liberar páginas de cache + dentries e inodos.
sysctl vm.drop_caches=3
Liberar memoria Swap. (Simplemente hay que desactivar y activar el espacio de intercambio)
swapoff -a swapon -a
NOTA: Lo recomendable es utilizar el comando sync para forzar la grabación de los datos del buffer cache a disco duro, entre el comando sync y la liberación de memoria se recomienda esperar algo de tiempo. Al ejecutar cualquiera de los comandos anteriores y liberar espacio, el valor vuelve a ser 0. Si se quiere utilizar asiduamente puede crearse una tarea cron.
free -m total used free shared buffers cached Mem: 7679 2046 5632 86 29 1360 -/+ buffers/cache: 656 7023 Swap: 2311 0 2311 sync;sleep 5;sysctl vm.drop_caches=3 free -m total used free shared buffers cached Mem: 7679 818 6861 86 0 174 -/+ buffers/cache: 643 7035 Swap: 2311 0 2311
Herramientas para optimizar uso de la memoria / Swap: Zswap / zRAM / Preload (Recomendado para entorno de escritorio).
Enlace de interes: listar_los_procesos_que_usan_memoria_swap