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
Ответы
Ответ 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
Как было описано в предыдущих ответах:
- Увеличение количества соединений в ядре
- Увеличение связи в uWSGI слишком
Пример. Если вы используете docker и docker-compose.
- Как увеличить соединения в ядре
В 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
- Как увеличить соединения в 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