Tunear la SWAP en servidores GNU Linux con swappiness
La SWAP es un área de intercambio de disco, que se usa para guardar las imágenes de los procesos, que no han de mantenerse en la memoria física. Aunque tiende a estar en desuso, ya que actualmente los nuevos equipos tienen mucha memoria, hasta 16 GB o 32 GB de memoria RAM en equipos doméstico, o Terabytes en servidores corporativos; lo cierto es que suele configurarse por defecto. La mejor manera de modificar su funcionamiento, es modificando el parámetro ‘swappiness’, en la configuración del sistema
En algunos casos los parámetros de fábrica, de dicha área, no son los más óptimos para nuestro sistema. Hay que tener en cuenta, que para calcular dicha memoria, debemos utilizar la siguiente fórmula:
Memoria volátil (total) / 100 = A
A * 10
Para comprobar a que porcentaje de uso de memoria volátil se empieza a utilizar la SWAP, podemos visualizar dicho dato, utilizando el siguiente comando:
sysctl –a | grep –i swap
De esta manera nos devolverá una información similar a la siguiente:
vm.swappiness = 60
¿Qué quiere decir esta cantidad? Significa que en el sistema empezará a utilizar la memoria SWAP, cuando la RAM pase del 40 % de uso. Si nos interesa modificar dicho parámetro, para que el uso de la memoria transaccional sea diferente, debemos modificar el parámetro ‘swappiness’, para ello editamos el fichero:
vi /proc/sys/vm/swappiness
Y modificamos el porcentaje.
Otra manera es mediante el comando:
Sysctl vm.spappiness=20
De esta manera la SWAP comenzará a utilizarse cuando el uso de la RAM pase del 80 %
Hay que tener en cuenta que una vez que se modifique el parámetro hay que reiniciarla, mediante:
swapoff –a
swapon –a
Con esto ya lo tenemos listo. Nos leemos en la próxima!
Para saber más os recomiendo el siguiente enlace de los foros de Ubuntu (en inglés)
How do I configure swappiness?
Fuente imagen | Flickr
Gran aporte! Aquí otro que tengo visto sobre swappiness en castellano:
http://www.sysadmit.com/2016/10/linux-swap-y-swappiness.html
Gracias por el aporte a ti también Roberto. ‘sysadmin’ es una gran página para cualquier administrador de sistemas que se aprecie, la tengo en mis enlaces. Un saludo
Interesante artículo, gracias. Pero me surge una pregunta, ¿sabéis que efectos tiene subir ese valor a nivel de rendimiento? es decir, se comenzará a utilizar el espacio swap «más tarde» y podremos tener más aplicaciones en RAM con el consiguiente aumento de rendimiento, pero no penalizará también esto de alguna otra forma? Lo digo porque si está por defecto a un nivel más bajo será por alguna razón supongo… ¿en qué casos estaría bien dejarlo con un valor más bajo como el que viene por defecto o incluso menos?
Hola,
El artículo está bien, pero no es correcto. Por un lado al cambiar la swapiness no es necesario desactivar y activar el swap, si bien es una forna de «forzar» al sistema a descargar el swap y «volver a empezar de 0» de forma que todas las páginas de memoria se descargarán del swap y veremos el efecto de forma más clara e inmediata.
Por otra parte, no es un porcentage de la RAM, debes entenderlo más como un peso. En termino final el kernel siempre busca la mejor «optimización» de la memoria. Eso significa que si un proceso lleva inactivo mucho tiempo, es mejor «bajarlo» a swap y dejar esa memoria libre para cache. La configuración por defecto del kernel puede ser adecuada para entornos mono-usuario (o desktop) donde se busca el mejor tiempo de respuesta para la aplicación activa, pero en algunos entornos concretos -o si te sobra mucha RAM- puedes bajarlo mucho, y así asegurarte de que ciertos procesos no se te van a swap.
También está claro que cosas como los discos SSD, hacen que no sea tan necesaria la cache de disco, de forma que puede ser interesante bajar el valor.
Igualmente, en kernels modernos puedes incluso poner la swapiness a 0, ya que como te comentaba no es un porcentage, si no un «weight» que indica al sistema de gestión de memoria como debe comportarse. Y aunque lo pongas a cero, si la cantidad de memoria es muy baja, el sistema utilizará el swap igualmente. Por el contrario -no recuerdo ahora mismo en que kernel se cambio pero de 3.14 en adelante estoy seguro de que no hay problema- en kernels antiguos, es peligroso ponerlo a 0, ya que sería como hacer un swapoff y el sistema nunca usario swap. Con el problema de que el OOM Killer te podría llegar a matar un proceso en una situación de falta de memoria, aunque tengas SWAP disponible.
Y el comando correcto para cambiar el swap es sysctl -w vm.spappiness=20 (Te falta el -w) 😉
En cualquier caso, buen aporte, ya que la configuración del swapiness es algo no muy conocido y en algunas circunstancias puede mejorar el rendimiento de algunos sistemas. Y espero que mis notas te ayuden a mejorar el artículo 🙂
Un saludo!
Hola Xavier,
Muchas gracias por el extenso y excelente aporte! Veo que dominas bastante el tema. Le echaré un vistazo con detenimiento a lo que dices. Tendré que volver a sacar mis apuntes de universidad 🙂
Saludetes!!
Hola,
De la docu del kernel:
swappiness
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase agressiveness, lower values
decrease the amount of swap. A value of 0 instructs the kernel not to
initiate swap until the amount of free and file-backed pages is less
than the high water mark in a zone.
The default value is 60.
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Igualmente tienes mucha más información online 🙂
Y para mirar la relación entre swap y cache también puedes buscar información sobre vm.vfs_cache_pressure
Un saludo!
simplemente excelente man! seguí así!
Hola Ice,
Gracias a ti por pasarte y comentar.
Salu2!