Tuning de red en GNU/Linux para Jgroups con protocolo UDP

Cuando iniciamos el servidor de aplicaciones Jboss con un profile ha o full-ha vamos a hacer uso del componente Jgroups para clustering. En caso de estar utilizando el stack UDP por defecto para las comunicaciones del clúster, podemos entonces encontrarnos con la siguiente notificación en server.log si no tenemos correctamente configurado el stack de red a nivel de kernel:

Los warnings son bastante claros. Tendremos que modificar ciertos valores que regulan el comportamiento del stack de red a nivel de kernel Linux, a saber:

  • net.core.wmem_max que es el tamaño máximo de buffer de envío para un socket dado.
  • net.core.rmem_max que es el tamaño máximo de buffer de recepción para un determinado socket.

En concreto, net.core.wmem_max debería aceptar hasta 1 MB y net.core.rmem_max hasta 25 MB según lo indicado en el log. La razón por la que esos valores son bajos por defecto es que el kernel Linux considera que en un principio va a ejecutarse en una red con baja latencia, por lo que el tamaño de buffer se mantendrá consecuentemente bajo. Para cubrirnos las espaldas ante posibles latencias mayores de red, Jboss nos recomienda aumentar estos valores.

Podremos hacerlo de varias maneras, teniendo siempre en cuenta que estamos aplicando valores en bytes y que necesitaremos ser root o hacerlo con sudo si tenemos permisos de administración:

  • De forma temporal:
    sysctl -w net.core.wmem_max=1000000
    sysctl -w net.core.rmem_max=25000000
    
  • Para hacer los cambios permanentes y que se mantengan después de un reinicio, lo más recomendable es retocar el fichero /etc/sysctl.conf y añadir/modificar las líneas:
    net.core.wmem_max=1000000
    net.core.rmem_max=25000000
    

    Después recargamos los parámetros del kernel con:

    sysctl -p
    

Tras estos cambios, al reiniciar Jboss el warning habrá desaparecido.