【问题标题】:Your server socket listen backlog is limited to 100 connections您的服务器套接字侦听积压限制为 100 个连接
【发布时间】:2012-09-02 15:10:48
【问题描述】:

我在 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 个连接的积压,您必须至少使用大约 99% 的容量,然后增加限制只会给您极小的喘息空间,然后传入连接的数量超过您可能提供的服务。弄清楚如何更快地处理请求会更有效率。

标签: python flask wsgi uwsgi supervisord


【解决方案1】:

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

根据手册,您可以使用-l 选项更改监听积压:

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

【讨论】:

    【解决方案2】:

    在启动服务器时使用-l--listen 选项(如user4815162342 所指)简单地增加uwsgi 的listen backlog 到大于128 的值可能会阻止uwsgi 启动。 Unix socket和TCP连接监听队列也有系统级限制,默认128个,需要增加。

    您可以像这样验证该设置:

    cat /proc/sys/net/core/somaxconn
    

    uwsgi 一直是patched,所以如果在启动uwsgi 时传递给--listen 参数的值大于系统级别限制,会导致uwsgi 严重失败。如果你想设置 uwsgi 的监听队列限制大于系统级限制,你必须首先增加内核的限制。这可以通过执行以下命令来完成:

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

    或者

    $ sysctl -w net.core.somaxconn=4096
    

    或者,将 net.core.somaxconn=4096 添加到 /etc/sysctl.conf 以使其在重新启动后仍然存在。

    【讨论】:

      【解决方案3】:

      正如之前的答案所述:

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

      示例。如果您使用的是 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
      
      1. 如何增加 uWSGI 中的连接数

      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 中工作。
      • 你好丹尼斯,编辑你的答案,不要在评论表单中回答,谢谢:)
      【解决方案4】:

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

      这只是 linux 调优系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-27
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        相关资源
        最近更新 更多