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
30
demandé sur Martijn Pieters 2012-09-09 18:44:49

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)
35
répondu user4815162342 2012-09-09 15:00:32

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).

33
répondu Nabeel Ahmed 2017-05-23 10:31:15

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
répondu Lujeni 2012-09-10 21:27:36

comme il a été décrit dans les réponses précédentes:

  1. augmenter les connexions dans le noyau
  2. Accroître les connexions dans uWSGI trop

exemple . Si vous utilisez docker et docker-composer .

  1. à 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
  1. 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
0
répondu Denis Krumko 2018-07-24 15:19:55