46

我在 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
4

4 回答 4

48

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

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

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
于 2012-09-09T14:49:52.480 回答
45

-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使其在重新启动后持续存在。

于 2016-04-06T13:22:22.210 回答
9

正如之前的答案中所描述的:

  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

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

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
于 2018-07-23T12:35:16.600 回答
3

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

它只是 linux 调优系统。

于 2012-09-10T21:27:36.453 回答