sábado, 19 de mayo de 2018

uWSGI limite de conexiones simultaneas

Cuando una aplicación posee gran numero de visitas, o de personas conectándose al mismo tiempo. Puede suceder que lleguemos al limite de conexiones simultaneas que posee uWSGI. Esto puede pasar también si en algún momento reiniciamos el servicio de uWSGI y hay mas de 100 personas esperando para conectarse, las primeras 100 serán atendidas pero las otras van a recibir un error del proxy. Cuando suceda este tipo de errores en el log vamos a ver un mensaje similar a este:

uWSGI listen queue of socket "0.0.0.0:xxxx" (fd: 6) full


Esto es debido a que uWSGI posee un limite de 100 conexiones simultaneas por defecto, este limite viene asi porque cada sistema operativo trae un limite de conexiones simultaneas, por lo general en Linux el limite por defecto es de 128 conexiones simultaneas por puerto.

¿Como podemos solucionar este error de uWSGI?

Para empezar antes de aumentar este limite, primero debemos chequear el tiempo que esta tomando uWSGI antes de dar una respuesta al usuario. Que no haya ningún bloqueo en la base de datos ni nada similar que este retrasando el tiempo de respuesta de la aplicación, no debemos aumentar este limite ciegamente y debemos chequear bien antes de modificar este limite.

Cuando estemos seguros de que el problema es causado por el numero de personas intentando conectarse a nuestra aplicación, debemos primero aumentar el limite de conexiones del sistema operativo. En el caso de Linux podemos revisar este limite en /proc/sys/net/core/somaxconn, y modificarlo cambiando el archivo o ejecutando sysctl -w net.core.somaxconn=1024. Si estamos usando docker podemos agregar como parametro con --sysctl net.core.somaxconn=1024 o si es con docker compose:
sysctls:
  net.core.somaxconn: 1024


Después de ajustar el limite del sistema operativo solo debemos debemos aumentar el limite añadiendo el parámetro --listen donde n es el numero máximo de espacios.

No hay comentarios:

Publicar un comentario