我在 uwsgi 上运行一个烧瓶应用程序。我使用主管来管理 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 上运行一个烧瓶应用程序。我使用主管来管理 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
请注意,100 个连接的“侦听积压”并不意味着您的服务器只能处理 100 个同时(或全部)连接 - 这取决于配置的进程或线程的数量。侦听积压是一个套接字设置,告诉内核如何限制侦听套接字的侦听队列中未完成(尚未接受)的连接数。如果挂起的连接数超过指定的大小,则会自动拒绝新的连接。定期为其连接提供服务的正常运行的服务器不应该需要大量的积压工作。
根据手册,您可以使用以下-l
选项更改监听积压:
-l|--listen <num>
set socket listen queue to <n> (default 100, maximum is system
dependent)
-l
只需在启动服务器时使用or--listen
选项(如user4815162342 所指)将 uwsgi的监听积压增加到大于 128 的值可能会阻止 uwsgi 启动。Unix 套接字和 TCP 连接侦听队列也有系统级限制,默认为 128,需要增加。
您可以像这样验证该设置:
cat /proc/sys/net/core/somaxconn
uwsgi 已被修补,如果--listen
在启动 uwsgi 时传递给参数的值大于系统级别限制,则会导致 uwsgi 严重失败。如果你想设置 uwsgi 的监听队列限制大于系统级限制,你必须首先增加内核的限制。这可以通过执行以下命令来完成:
$ echo 4096 > /proc/sys/net/core/somaxconn
或者
$ sysctl -w net.core.somaxconn=4096
或者,添加它net.core.somaxconn=4096
以/etc/sysctl.conf
使其在重新启动后持续存在。
正如之前的答案中所描述的:
例子。如果您使用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
此外,如果您不使用设置文件,您可以直接在docker-compose 命令(-l
或标志)中更改此参数:--listen
uwsgi.ini
uwsgi_runner:
<<: *app-base
command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
您可以修改您的 SOMAXCONN/proc/sys/net/core/somaxconn
以增加此限制。
它只是 linux 调优系统。