uwsgi: votre stock de serveurs socket listen est limité à 100 connexions
je lance une application flasque sur uwsgi. J'utilise le superviseur pour gérer le processus uwsgi. Je trouve le journal disant que
votre stock de serveurs socket listen est limité à 100 connexions.
comment surmonter la limite de 100 connexions? Mon script d'exécution est comme suit:
[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads
4 réponses
notez qu'un "carnet 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 du nombre de processus configurés ou de threads. Le retard d'écoute est un paramètre de socket qui indique au noyau comment limiter le nombre de connexions en attente (non encore ajustées) dans la file d'attente d'écoute d'une socket d'écoute. Si le nombre de connexions en attente dépasse la taille spécifiée, les nouvelles sont automatiquement rejetée. Un serveur fonctionnel assurant régulièrement la maintenance de ses connexions ne devrait pas nécessiter un gros arriéré.
selon le manuel, vous pouvez changer le carnet d'écoute avec l'option -l
:
-l|--listen <num>
set socket listen queue to <n> (default 100, maximum is system
dependent)
il suffit de changer (augmenter) le carnet d'écoute de uwsgi en utilisant l'option -l
ou --listen
(comme indiqué par user4815162342 ) pendant le démarrage du serveur, à une valeur supérieure à 128 ne permettra pas à uwsgi d'exécuter. Comme il y a aussi une limite au niveau du système sur la file D'attente d'écoute de la connexion Unix et TCP - la valeur par défaut est 128, Vous pouvez la vérifier (pour la socket Unix):
cat /proc/sys/net/core/somaxconn
uwsgi avait été patché , de telle sorte que si la valeur passée au paramètre --listen
lors du démarrage d'uwsgi est supérieure à la limite du niveau du système (Linux kernel limit), uwsgi va échouer. Si vous voulez que la limite de la file d'attente listen d'uwsgi soit supérieure à la limite du niveau du système (c'est - à-dire 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 ajouter net.core.somaxconn=4096
à /etc/sysctl.conf
pour qu'il devienne permanente (survivre 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 il a été décrit dans les réponses précédentes:
- augmenter les connexions dans le noyau
- Accroître les connexions dans uWSGI trop
exemple . Si vous utilisez docker et docker-composer .
- à Chaud pour accroître les connexions dans le noyau
Dans docker-compose.yml
, dans le bloc où vous décrire 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
- comment augmenter les connexions en uWSGI
Dans uwsgi.ini
:
[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI
aussi, vous pouvez modifier ce paramètre directement dans docker-composer commande ( -l
ou --listen
drapeau) 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