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
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)
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).
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.
Comme cela a été décrit dans les réponses précédentes:
Exemple. Si vous utilisez docker et docker-compose.
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
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