User Tools

Site Tools


optimizacion_de_memoria_ram_en_linux

This is an old revision of the document!


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

optimizacion_de_memoria_ram_en_linux.1608933466.txt.gz · Last modified: 2020/12/25 22:57 by 127.0.0.1