Подтвердить что ты не робот

Uwsgi: ваш серверный слуховой журнал отстает от 100 подключений

Я запускаю флеш-приложение на uwsgi. Я использую диспетчер для управления процессом uwsgi. Я нахожу журнал, говорящий, что

ваш серверный прослушиватель прослушивания ограничен 100 подключениями.

Как преодолеть ограничение 100 соединений? Мой запуск script выглядит следующим образом:

[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads
4b9b3361

Ответ 1

Обратите внимание, что "прослушивание назад" из 100 соединений не означает, что ваш сервер может обрабатывать только 100 одновременных (или общих) соединений - это зависит от количества сконфигурированных процессов или потоков. Запуск прослушивания - это параметр сокета, указывающий ядру, как ограничить количество выдающихся (пока неаккатированных) подключений в очереди прослушивания прослушивающего сокета. Если количество ожидающих соединений превышает указанный размер, новые автоматически отклоняются. Функционирующий сервер, регулярно обслуживающий свои соединения, не должен требовать большого размера отставания.

В соответствии с руководством вы можете изменить отставание прослушивания с помощью опции -l:

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

Ответ 2

Простое изменение (увеличение) uwsgi listen backlog с использованием опции -l или --listen (как указано user4815162342) при запуске сервера до значения больше 128, не разрешает запуск uwsgi. Поскольку существует также ограничение уровня системы для Unix-сокета и очереди прослушивания TCP-соединения - по умолчанию 128, вы можете проверить его (для сокета Unix):

cat /proc/sys/net/core/somaxconn

uwsgi был исправлен, так что если значение, переданное параметру --listen при запуске uwsgi, больше, чем системный уровень (Linux ограничение ядра), это приведет к сбою uwsgi. Если вы хотите установить лимит ожидания uwsgi, превышающий лимит уровня системы (т.е. 128), вы должны сначала увеличить лимит ядра. Может быть выполнено выполнение следующих команд:

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

Или

$ sysctl -w net.core.somaxconn=4096

Или, добавьте net.core.somaxconn=4096 в /etc/sysctl.conf, чтобы он стал постоянным (пережить перезагрузку).

Ответ 3

Вы можете изменить SOMAXCONN в своем /proc/sys/net/core/somaxconn, чтобы увеличить этот предел. Это просто системы настройки Linux.

Ответ 4

Как было описано в предыдущих ответах:

  1. Увеличение количества соединений в ядре
  2. Увеличение связи в uWSGI слишком

Пример. Если вы используете docker и docker-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 или --listen), если вы не используете uwsgi.ini настроек uwsgi.ini:

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