我在uwsgi上运行flask应用程序。我使用supervisor来管理uwsgi进程。我发现日志中显示:
您的服务器套接字侦听队列仅限于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
我在uwsgi上运行flask应用程序。我使用supervisor来管理uwsgi进程。我发现日志中显示:
您的服务器套接字侦听队列仅限于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
-l|--listen <num>
set socket listen queue to <n> (default 100, maximum is system
dependent)
使用-l
或--listen
选项(如user4815162342所指出的)仅通过增加uwsgi的侦听队列,将其设置为大于128的值,可能会阻止uwsgi启动。Unix套接字和TCP连接侦听队列还有系统级别限制,默认值为128,需要增加。
您可以验证是否设置为:
cat /proc/sys/net/core/somaxconn
uwsgi已经进行了修复,使得如果在启动uwsgi时传递给--listen
参数的值大于系统级别限制,它将导致uwsgi完全失败。如果您想将uwsgi的监听队列限制设置为大于系统级别限制的值,则必须首先增加内核的限制。可以执行以下命令来完成这个过程:
$ echo 4096 > /proc/sys/net/core/somaxconn
$ sysctl -w net.core.somaxconn=4096
要使其在重启后仍然生效,请将 net.core.somaxconn=4096
添加到 /etc/sysctl.conf
中。
在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
此外,如果您没有使用uwsgi.ini
配置文件,您可以直接在docker-compose命令中更改此参数(使用-l
或--listen
标志):
uwsgi_runner:
<<: *app-base
command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
net.core.somaxconn: 1024
设置为步骤,以增加内核中的连接,如果您的环境在Docker中运行。 - Denis Krumko您可以修改/proc/sys/net/core/somaxconn
中的SOMAXCONN以增加此限制。
这只是Linux调整系统的方法。