uwsgi:您的服务器套接字侦听backlog限制为100个连接

sho*_*ujs 36 python wsgi flask uwsgi supervisord

我在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
Run Code Online (Sandbox Code Playgroud)

use*_*342 38

请注意,100个连接的"监听积压"并不意味着您的服务器只能处理100个同时(或完全)连接 - 而是取决于已配置的进程或线程的数量.listen backlog是一个套接字设置,告诉内核如何限制侦听套接字侦听队列中未完成的(尚未绑定的)连接数.如果挂起的连接数超过指定的大小,则会自动拒绝新的连接数.定期为其连接提供服务的功能正常的服务器不应该需要大的积压大小.

根据手册,您可以使用以下-l选项更改listen backlog :

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
Run Code Online (Sandbox Code Playgroud)


Nab*_*med 35

在启动服务器时,使用-l--listen选项(如user4815162342指向)更改(增加)uwsgi的监听积压,大于128的值将不允许uwsgi运行.由于Unix套接字和TCP连接侦听队列也存在系统级限制 - 默认值为128,您可以验证它(对于Unix套接字):

cat /proc/sys/net/core/somaxconn
Run Code Online (Sandbox Code Playgroud)

uwsgi已被修补,这样如果--listen在启动uwsgi时传递给参数的值大于系统级限制(Linux内核限制),则会导致uwsgi难以实现.如果您希望将uwsgi的侦听队列限制设置为大于系统级限制(即128),则必须首先增加内核的限制.可以执行以下命令:

$ echo 4096 > /proc/sys/net/core/somaxconn
$ cat /proc/sys/net/core/somaxconn
4096
Run Code Online (Sandbox Code Playgroud)

要么

$ sysctl -w net.core.somaxconn=4096
Run Code Online (Sandbox Code Playgroud)

或者,添加net.core.somaxconn=4096/etc/sysctl.conf使其成为永久性的(在重新启动后继续).


小智 5

如先前答案中所述:

  1. 增加内核中的连接
  2. 增加uWSGI连接

实例。如果您正在使用dockerdocker-compose

  1. 如何增加内核中的连接

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
Run Code Online (Sandbox Code Playgroud)
  1. 如何在uWSGI中增加连接

uwsgi.ini

[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI
Run Code Online (Sandbox Code Playgroud)

另外,如果您不使用设置文件,则可以直接在docker-compose命令-l--listen标志)中更改此参数uwsgi.ini

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
Run Code Online (Sandbox Code Playgroud)