2012-09-09 8 views
24

Ich laufe eine Flasche App auf uwsgi. Ich verwende einen Supervisor, um den uwsgi-Prozess zu verwalten. Ich finde das Protokoll sagen, dassuwsgi: Ihr Server-Socket zuhören Rückstand ist auf 100 Verbindungen beschränkt

Ihr Server-Socket Listenrückstau ist auf 100 Verbindungen beschränkt.

Wie überwindet man die Beschränkung von 100 Verbindungen? Mein laufender Skript ist als unten:

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

Sind Sie sicher, dass Sie das tun müssen? Wenn Sie einen Rückstand von 100 Verbindungen akkumulieren, müssen Sie mindestens etwa 99% Ihrer Kapazität verwenden. Wenn Sie dann das Limit erhöhen, erhalten Sie nur noch extrem wenig Speicherplatz, bevor die Anzahl der eingehenden Verbindungen das übersteigt, was Sie möglicherweise bereitstellen können. Es wäre viel produktiver, herauszufinden, wie Sie die Anfragen schneller bedienen können. –

Antwort

30

Beachten Sie, dass ein „hören Bestand“ von 100 Verbindungen, bedeutet nicht, dass der Server nur 100 gleichzeitige (oder total) verarbeiten kann Verbindungen - das ist stattdessen abhängig von der Anzahl von konfigurierten Prozessen oder Threads. Das Listen-Backlog ist eine Socket-Einstellung, die dem Kernel mitteilt, wie die Anzahl der ausstehenden (noch nicht akquirierten) Verbindungen in der Listen-Warteschlange eines abhörenden Sockets begrenzt werden kann. Wenn die Anzahl der ausstehenden Verbindungen die angegebene Größe überschreitet, werden neue automatisch abgelehnt. Ein funktionierender Server, der regelmäßig seine Verbindungen bedient, sollte keine große Rückstandsgröße erfordern.

Laut Handbuch kann man den Rückstand hören ändert sich mit der -l Option:

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

Sie können SOMAXCONN ändern in Ihrem/proc/sys/net/core/SOMAXCONN diese Grenze zu erhöhen. Es ist einfach Linux-Tuning-Systeme.

25

Durch einfaches Ändern (Erhöhen) der uwsgi der Rückstand hören die -l oder --listen Option (wie von user4815162342 hingewiesen), während der Server gestartet wird, auf einen Wert größer als 128 wird uwsgi nicht zulassen, dass laufen. Da es auch eine Systemebene Grenze der Warteschlange auf Unix-Socket und TCP-Verbindung hören - die Standard-128 ist, können Sie es (für Unix-Socket) überprüfen können:

cat /proc/sys/net/core/somaxconn 

uwsgi hatte patched gewesen, so dass, wenn der Wert übergibt --listen Parameter beim Starten von uwsgi ist größer als das System-Level-Limit (Linux-Kernel-Limit) es wird dazu führen, dass uwsgi hart ausfallen. Wenn Sie das Limit für die Warteschlangenwarteschlange von uwsgi höher als das Systemlevel (d. H. 128) setzen möchten, müssen Sie zuerst das Limit des Kernels erhöhen. Kann getan werden die folgenden Befehle ausführen:

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

Oder

$ sysctl -w net.core.somaxconn=4096 

Oder net.core.somaxconn=4096-/etc/sysctl.conf hinzufügen für sie (überleben den Neustart) dauerhaft werden.