Ajustar el swap en Linux para mejorar el rendimiento del servidor

Muchos administradores ignoran o subutilizan los parámetros swap en Linux, pero el hacer ajustes correctos dará mejor rendimiento al sistema.

El caché y el espacio de intercambio (swap space) son herramientas poderosas cuando se lleva a cabo la afinación de rendimiento de Linux. Muchos creen que el espacio de intercambio no es útil y por lo tanto configuran una cantidad mínima. Pero si quiere rendimiento óptimo en sus servidores, necesita un mejor enfoque para manejar el caché y el espacio de intercambio. 

En cualquier sistema operativo, el espacio de intercambio se usa como memoria adicional.  Si a un sistema se le agota el RAM físico, puede empezar a asignar espacio de intercambio, que es la memoria simulada en el disco duro.  En general es más lento, pero siempre es bueno tener intercambio.  Si a su servidor se le agota la memoria (es decir RAM, o intercambio), puede caerse.

Otro elemento relacionado es el caché.  El caché se usa para almacenar archivos usados regularmente en la memoria.  Usar caché es preferible a acceder a datos desde el disco duro, que es mucho más lento.  Un sistema con caché insuficiente necesita acceder datos del disco duro con mayor frecuencia, lo que resulta en menor rendimiento. 

Antes de profundizar en la configuración del espacio de intercambio, hay algunas cosas generales que hay que saber de él. Algunos casos implican solicitudes muy particulares sobre el espacio de intercambio, como los servidores que ejecutan Oracle o SAP y aplicaciones que tienen cantidades fijas de espacio de intercambio. Si su servidor ejecuta Oracle o SAP, simplemente aplique sus recomendaciones para evitar problemas con estas aplicaciones de misión crítica.

En los casos donde no se usa ni SAP ni Oracle, aplicamos las reglas genéricas sobre el uso del espacio de intercambio.  Esto significa que Linux usará espacio de intercambio solamente si se agota su memoria.  Para un entendimiento más sofisticado sobre el uso del espacio de intercambio, es importante entender la contraparte del intercambio. Esta es la situación cuando un servidor tiene mucha memoria disponible. Si ese es el caso, esta memoria se usa como caché.  Si verdaderamente quiere entender el espacio de intercambio, tiene que entender  también el caché.

Caché contra espacio de intercambio en la afinación de rendimiento de Linux 
El caché es RAM que se usa para almacenar temporalmente archivos usados recientemente.  Si entra una solicitud de leer un archivo, usualmente este archivo debe accederse desde el disco duro del servidor.  Al lograrse el acceso, se copia al RAM y de allí se sirve al cliente que solicitó el archivo.  En términos de rendimiento, es muy costoso copiar el archivo del disco duro al RAM.  Para obtener buen rendimiento en un servidor, tiene que haber suficiente caché disponible.  En general, tenga por objetivo al menos un 20% del RAM total como caché, pero más es a menudo mejor.

Lo opuesto al caché es el intercambio, en el cual las páginas de memoria inactivas se mueven del RAM al disco.  Al hacer eso, el servidor libera memoria para hacer otras cosas, incluyendo poner archivos en el caché.  Por defecto, el núcleo (kernel) intenta intercambiar sólo las páginas de memoria que no se han usado recientemente, pero que todavía necesitan estar disponibles para el proceso que las ha asignado.  El núcleo lo puede hacer fácilmente, porque cuando un proceso solicita memoria, normalmente solicita mucha más que la cantidad de memoria que realmente necesita.  Esto es en caso de que el proceso necesite acceder a más memoria después; es bueno para el rendimiento el tener esa memoria apartada.  Ya que esta memoria en realidad no está siendo usada, también es seguro moverla al espacio de intercambio.

Hay una estrecha relación entre la cantidad de espacio de intercambio y la cantidad de caché que tiene disponible un servidor.  El punto de partida para optimizar la cantidad de caché en su servidor es que en todo momento debe haber al menos 20% del RAM total como caché; 30% es aún mejor.  Para cumplir esta meta, tiene que asegurarse de que el servidor tenga la habilidad suficiente para mover páginas al espacio de intercambio.  Si está por debajo de la cantidad mínima de caché que desea tener, aumente la probabilidad de intercambio de su servidor. Para identificar la cantidad de caché actualmente disponible en su servidor, use el comando free –m.  Su servidor debe estar funcionado durante al menos unas cuantas horas para tener una buena idea de la cantidad de RAM que usualmente está disponible para caché.

 

Use free -m para determinar la cantidad de caché

linux-s3w6:~ # free -m

 

total

usado

libre

Compartido

Búferes

En caché

Mem:

993

721

271

0

25

272

-/+ búferes/cache:

423

569

 

 

 

 

Intercambio:

1983

0

1983

 

 

 

linux-s3w6:~ #

Si está usando el comando free –m, puede ver la cantidad total de RAM (993 MB en este caso), que está dividida entre memoria usada y disponible.  Además, puede ver cuánta memoria usada está en la páginas de memoria compartida, búferes y caché.  En este caso, los búferes y caché constituyen casi 300MB, que es aproximadamente 30% del RAM total disponible, lo que significa que el sistema de donde se tomó esta imagen está bien.  En la última línea, puede ver que hay espacio de intercambio disponible, pero no está siendo usado.

Si su servidor cae por debajo de la cantidad deseada (de 20 a 30%) de caché disponible, primero tiene que determinar si tiene suficiente espacio de intercambio.  Un servidor moderno típicamente tiene un mínimo de 2GB de espacio de intercambio, y si tiene más de 8GB de RAM, también debería tener aproximadamente 25% del RAM total disponible para intercambiar.  Saber esa información le ayudará a asegurarse de que su servidor tenga suficiente espacio de intercambio antes de llevar a cambio cualquier puesta a punto del rendimiento de Linux.

Aumentar la propensión a intercambiar
Si el servidor cae por debajo de 25% de caché, puede usar el parámetro de propensión a intercambiar (“swappiness”) para aumentarlo. 

Por defecto, el núcleo Linux intercambia de forma agresiva, aunque no sea evidente en la mayoría de servidores debido a la cantidad de RAM, ya que la cantidad de espacio de intercambio en uso es 0 ó casi 0.  Para influenciar el comportamiento de intercambio de un servidor, un administrador puede modificar el parámetro de propensión a intercambiar. Este parámetro fija el grado de propensión del núcleo a mover páginas de memoria al espacio de intercambio.

Una mayor propensión a intercambiar tiene sentido si la cantidad de caché baja demasiado.  Al incrementar la propensión a intercambiar, las páginas de memoria serán trasladadas del RAM al espacio de intercambio más rápidamente, lo que libera memoria y la hace disponible para otros usos, como para el caché.

El parámetro de propensión a intercambiar puede tener un valor de entre 0 y 100, donde 0 significa “no intercambiar para nada” y 100 significa “intercambiar lo más pronto posible”.  Por defecto, la propensión a intercambiar de núcleo está fijada en 60.  Para cambiar este parámetro, cambie el contenido del archivo /proc/sys/vm/swappiness, usando el comando siguiente:

echo 80 > /proc/sys/vm/swappiness

Para que la configuración persista, también debería incluir la siguiente línea en /etc/sysctl.conf:
vm.swappiness = 60

Afinar la configuración del espacio de intercambio de un servidor de Linux resultará en un mejor manejo de las entradas y salidas, y por lo tanto un rendimiento mucho mejor del sistema Linux.

 

SOBRE EL AUTOR: Sander van Vugt es un entrenador y consultor independiente   que vive en los Países Bajos. Van Vugt es un experto en alta disponibilidad, virtualización y rendimiento de Linux, y ha completado varios proyectos que implementan las tres cosas.  Sander también es un ponente regular en muchas conferencias de Linux alrededor del mundo.  También es el escritor de muchos libros relacionados con Linux, como Beginning the Linux Command Line, Beginning Ubuntu Server Administration y Pro Ubuntu Server Administration.

Investigue más sobre Infraestructura empresarial y DC