Назад | Перейти на главную страницу

worker_connections недостаточно, пока есть простаивающие рабочие

Я пытаюсь увеличить количество одновременных подключений, которые может обрабатывать мой сервер.

$uname -a
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux

$ulimit -Sn
65536

$ulimit -Hn
65536

Конфигурация Nginx имеет следующие строки:

worker_processes  4; # or 8
worker_rlimit_nofile 60000;

events {
    worker_connections  1024;
}

Также есть сонный (спящий бесконечно) бэкэнд python asyncio HTTP, используемый через восходящий поток.

И через несколько секунд нагрузочного тестирования:

2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough
2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough

пока

$netstat -anvpt | wc -l  
1156   # or twice bigger if there is 8 worker processes.

htop показывает, что есть 4 (или 8) рабочих процесса nginx и используется только 50% 1 ядра ЦП (в то время как 3 других ядра простаивают). Более детальное расследование netstat выходные данные показывают, что используются только 2 рабочих процесса, и оба они потребовали не более половины из 1024 разрешенных соединений (как от клиентов к nginx, так и от nginx к восходящему потоку).

Кроме того, внутри работают nginx и backend. docker контейнеры.

UPD: Если я увеличу worker_connections до 10240 я буду обрабатывать гораздо больше клиентов, и производительность ЦП будет узким местом. Но вопрос в том, почему я столкнулся с сообщением 1024 worker_connections are not enough пока еще есть 2 или 6 простаивающих рабочих.

Прибытие сюда поздно, но для гуглеров попробуйте увеличить лимит рабочих процессов (или использовать автоматический режим):

worker_processes auto;

В соответствии с Документация Nginx, они напрямую влияют друг на друга:

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