我在uwsgi上运行一个烧瓶应用程序。我使用主管来管理uwsgi进程。我发现日志说
您的服务器套接字侦听backlog仅限于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 :(得分:36)
请注意"收听积压" 100个连接并不意味着您的服务器只能处理100个同时(或总)连接 - 这取决于配置的进程或线程的数量。 listen backlog是一个套接字设置,告诉内核如何限制侦听套接字侦听队列中未完成的(尚未绑定的)连接数。如果挂起的连接数超过指定的大小,则会自动拒绝新的连接数。定期为其连接提供服务的功能正常的服务器不需要大量的积压大小。
根据手册,您可以使用-l
选项更改监听积压:
-l|--listen <num>
set socket listen queue to <n> (default 100, maximum is system
dependent)
答案 1 :(得分:34)
在启动服务器时,使用-l
或--listen
选项(由user4815162342指示)简单地更改(增加)uwsgi的监听积压,大于128的值不会允许uwsgi运行。由于Unix套接字和TCP连接侦听队列也存在系统级限制 - 默认值为128,您可以验证它(对于Unix套接字):
cat /proc/sys/net/core/somaxconn
uwsgi已经patched,这样如果在启动uwsgi时传递给--listen
参数的值大于系统级限制(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
,以使其成为永久版(在重新启动后继续使用)。
答案 2 :(得分:3)
您可以修改/ proc / sys / net / core / somaxconn中的SOMAXCONN以增加此限制。 它只是Linux调优系统。
答案 3 :(得分:1)
如先前答案中所述:
示例。如果您使用的是 docker 和 docker-compose 。
在docker-compose.yml
的块中,您描述如何运行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
在uwsgi.ini
中:
[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI
此外,如果您不使用-l
设置文件,则可以直接在 docker-compose命令(--listen
或uwsgi.ini
标志)中更改此参数:
uwsgi_runner:
<<: *app-base
command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here