Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 您的服务器套接字侦听积压限制为100个连接_Python_Flask_Wsgi_Uwsgi_Supervisord - Fatal编程技术网

Python 您的服务器套接字侦听积压限制为100个连接

Python 您的服务器套接字侦听积压限制为100个连接,python,flask,wsgi,uwsgi,supervisord,Python,Flask,Wsgi,Uwsgi,Supervisord,我在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个连接的“侦听积

我在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个(或总共)连接,而是取决于配置的进程或线程的数量。listen backlog是一个套接字设置,告诉内核如何限制侦听套接字的侦听队列中未完成(尚未接受)的连接数。如果挂起的连接数超过指定的大小,则会自动拒绝新连接。定期维护其连接的正常运行的服务器不需要很大的积压工作

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

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
-l |——听
将套接字侦听队列设置为(默认值为100,最大值为系统
从属)

您可以在
/proc/sys/net/core/SOMAXCONN
中修改SOMAXCONN以增加此限制


这只是linux调优系统。

在启动服务器时,只需使用
-l
--listen
选项(如所指)将uwsgi的侦听积压工作增加到大于128的值,可能会阻止uwsgi启动。Unix套接字和TCP连接侦听队列(默认值为128)上还有一个系统级限制,需要增加

您可以验证以下设置:

cat /proc/sys/net/core/somaxconn
如果启动uwsgi时传递给
--listen
参数的值大于系统级限制,则会导致uwsgi严重失败。如果要将uwsgi的侦听队列限制设置为大于系统级限制,则必须首先增加内核限制。这可以通过执行以下命令来完成:

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


或者,将
net.core.somaxconn=4096
添加到
/etc/sysctl.conf
中,使其在重新启动时保持不变。

如前面的回答中所述:

  • 增加内核中的连接
  • 增加uWSGI中的连接太多
  • 示例。如果您使用的是dockerdocker 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
    设置文件,则可以在docker compose命令中直接更改此参数(
    -l
    -listen
    标志):

    uwsgi_runner:
        <<: *app-base
        command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
    
    uwsgi\u跑步者:
    
    你确定这就是你需要做的吗?如果您累积了100个连接的积压,那么您必须使用至少99%的容量,然后在传入连接的数量超过您可能提供的服务之前,增加限制只会给您一个极小的喘息空间。找出如何更快地为请求提供服务将更有效率。要获得一个完美的答案,请在编写时描述如何增加内核中的连接。如果您的环境在docker中工作,则设置
    net.core.somaxconn:1024
    是增加内核中的连接的一个步骤。您好Denis,请编辑您的答案,不要在评论表中回答,谢谢:)
    [uwsgi]
    # ... other settings ...
    listen = 1024 # set max connections to 1024 in uWSGI
    
    uwsgi_runner:
        <<: *app-base
        command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here