web-dev-qa-db-fra.com

uwsgi: le backlog d'écoute de votre socket serveur est limité à 100 connexions

J'exécute une application flask sur uwsgi. J'utilise un superviseur pour gérer le processus uwsgi. Je trouve le journal disant que

le backlog d'écoute de votre socket serveur est limité à 100 connexions.

Comment surmonter la limitation de 100 connexions? Mon script en cours d'exécution est comme ci-dessous:

[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads
36
shoujs

Notez qu'un "backlog d'écoute" de 100 connexions ne signifie pas que votre serveur ne peut gérer que 100 connexions simultanées (ou totales) - cela dépend plutôt du nombre de processus ou de threads configurés. Le backlog d'écoute est un paramètre de socket indiquant au noyau comment limiter le nombre de connexions en attente (non encore adaptées) dans la file d'attente d'écoute d'un socket d'écoute. Si le nombre de connexions en attente dépasse la taille spécifiée, les nouvelles sont automatiquement rejetées. Un serveur fonctionnel qui entretient régulièrement ses connexions ne devrait pas nécessiter une grande taille de backlog.

Selon le manuel, vous pouvez modifier le backlog d'écoute avec le -l option:

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
38
user4815162342

Changer simplement (augmenter) le backlog d'écoute de l'uwsgi en utilisant le -l ou --listen option (comme indiqué par ser4815162342 ) lors du démarrage du serveur, à une valeur supérieure à 128 ne permettra pas à uwsgi de s'exécuter. Comme il y a également une limite de niveau système sur le socket Unix et TCP file d'attente d'écoute de connexion - la valeur par défaut est 128, vous pouvez le vérifier (pour le socket Unix):

cat /proc/sys/net/core/somaxconn

uwsgi avait été corrigé , de sorte que si la valeur passée à --listen le paramètre lors du démarrage d'uwsgi est supérieur à la limite du niveau système (limite du noyau Linux), ce qui entraînera l'échec d'uwsgi. Si vous souhaitez définir une limite de file d'attente d'écoute pour uwsgi supérieure à la limite du niveau système (par exemple 128) - vous devez d'abord augmenter la limite du noyau. Peut être fait en exécutant les commandes suivantes:

$ echo 4096 > /proc/sys/net/core/somaxconn
$ cat /proc/sys/net/core/somaxconn
4096

Ou

$ sysctl -w net.core.somaxconn=4096

Ou, ajoutez net.core.somaxconn=4096 à /etc/sysctl.conf pour qu'il devienne permanent (survivez au redémarrage).

35
Nabeel Ahmed

Vous pouvez modifier SOMAXCONN dans votre/proc/sys/net/core/somaxconn pour augmenter cette limite. Il s'agit simplement de systèmes de réglage Linux.

3
Lujeni

Comme cela a été décrit dans les réponses précédentes:

  1. Augmenter les connexions dans le noyau
  2. Augmentez les connexions dans uWSGI aussi

Exemple. Si vous utilisez docker et docker-compose.

  1. Comment augmenter les connexions dans le noyau

Dans docker-compose.yml, dans le bloc où vous décrivez comment exécuter uWSGI:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi --ini /app/uwsgi.ini
    # ... other settings ...
    sysctls:
        net.core.somaxconn: 1024 # set max connections to 1024 in kernel
  1. Comment augmenter les connexions dans uWSGI

Dans uwsgi.ini:

[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI

Vous pouvez également modifier ce paramètre directement dans commande docker-compose (-l ou --listen flag) si vous n'utilisez pas uwsgi.ini fichier de paramètres:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
2
Denis Krumko