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

问题描述 投票:37回答:4

我在uwsgi上运行了flask应用程序。我使用主管来管理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
python flask wsgi uwsgi supervisord
4个回答
39
投票

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

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

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

37
投票

在启动服务器时,使用-l--listen选项(如user4815162342所指,仅增加uwsgi的监听积压,使其大于128可能会阻止uwsgi启动。 Unix套接字和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以使其在重新引导后仍然存在。


6
投票

如先前答案中所述:

  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
  1. 如何在uWSGI中增加连接

uwsgi.ini中:

[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI

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

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here

3
投票

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

这只是Linux调优系统。

© www.soinside.com 2019 - 2024. All rights reserved.