Задержка прослушивания сокета вашего сервера ограничена 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

person shoujs    schedule 09.09.2012    source источник
comment
Вы уверены, что это то, что вам нужно сделать? Если вы накапливаете отставание в 100 подключений, вы должны использовать по крайней мере около 99% своей емкости, и тогда увеличение лимита даст вам лишь крайне минимальную передышку, прежде чем количество входящих подключений превысит то, что вы можете обслужить. Гораздо продуктивнее было бы выяснить, как можно быстрее обслуживать запросы.   -  person hmakholm left over Monica    schedule 09.09.2012


Ответы (4)


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

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

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

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

Вы можете проверить этот параметр следующим образом:

cat /proc/sys/net/core/somaxconn

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

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

Or

$ sysctl -w net.core.somaxconn=4096

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

person Nabeel Ahmed    schedule 06.04.2016

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

  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

In uwsgi.ini:

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

Также вы можете изменить этот параметр непосредственно в команде docker-compose (флажок -l или --listen), если вы не используете файл настроек uwsgi.ini:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
person Denis Krumko    schedule 23.07.2018
comment
Чтобы получить идеальный ответ, опишите, как увеличить количество соединений в ядре, как вы написали. - person Baptiste Mille-Mathias; 23.07.2018
comment
Установка net.core.somaxconn: 1024 — это шаг к увеличению подключений в ядре, если ваше окружение работает в докере. - person Denis Krumko; 24.07.2018
comment
Здравствуйте Денис, отредактируйте свой ответ, не отвечайте в форме комментария, спасибо :) - person Baptiste Mille-Mathias; 24.07.2018

Вы можете изменить SOMAXCONN в своем /proc/sys/net/core/somaxconn, чтобы увеличить этот лимит.

Это просто системы настройки Linux.

person Lujeni    schedule 10.09.2012