2012-09-09 124 views
24

我在uwsgi上運行燒瓶應用程序。我使用主管來管理uwsgi進程。我發現日誌說uwsgi:您的服務器套接字監聽積壓限制爲100個連接

您的服務器套接字偵聽積壓被限制爲100個連接。

如何克服100個連接的限制? 我的執行腳本如下:

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

你確定這是你需要做的嗎?如果積壓了100個連接的積壓,則必須至少使用大約99%的容量,然後增加限制只會在進入的連接數量超過您可能服務的數量之前給您的呼吸空間極小。弄清楚如何更快地爲請求提供服務會更有成效。 –

回答

30

請注意,「聽積壓」 100個的連接並不意味着你的服務器只能處理100個併發(或全部)連接 - 這是不是依賴於數量配置的進程或線程。 listen backlog是一個套接字設置,它告訴內核如何限制偵聽套接字的偵聽隊列中未完成(尚未釋放)的連接數。如果未決連接的數量超過指定的大小,則新的連接會自動被拒絕。定期爲其連接提供服務的正常運行的服務器不需要大量積壓。

根據手冊,您可以用-l選項更改偵聽backlog:

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

您可以修改SOMAXCONN在你的/ proc/SYS /網/核心/ SOMAXCONN增加此限制。這只是linux調優系統。

25

只需在啓動服務器時使用-l--listen選項(如user4815162342指出的)將uwsgi的監聽積壓更改(增加)爲大於128的值,將不會允許uwsgi運行。由於還存在對Unix套接字和TCP連接的系統級限制偵聽隊列 - 默認值是128,你可以驗證它(對於Unix套接字):

cat /proc/sys/net/core/somaxconn 

uwsgi已經patched,例如,當值傳遞給--listen參數在啓動uwsgi時大於系統級別的限制(Linux內核限制),它會導致uwsgi失敗。如果你想設置uwsgi的監聽隊列限制大於系統級限制(即128) - 你必須首先增加內核的限制。可以做執行以下命令:

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

或者

$ sysctl -w net.core.somaxconn=4096 

或者添加net.core.somaxconn=4096/etc/sysctl.conf它成爲永久性的(即使重新啓動)。