Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Как Это ответ на вопрос, которого нет в статье...
》Почему один процесс NGINX берёт на себя всю работу?
Почему один процесс NGINX берёт на себя всю работу?Потому что accept_mutex включен. Выключите и будет счастье.
В случае epoll-and-accept алгоритм другой: Linux, кажется, выбирает процесс, который был добавлен в очередь ожидания новых соединений последним, т.е. LIFO.AFAIK, с флагом EPOLLEXCLUSIVE это не так и ждуны добавляются в конец очереди.
Потому что accept_mutex включен. Выключите и будет счастье.
По умолчанию он был выключен только относительно недавно, в последних версиях. До этого был по умолчанию включен. А ещё многие начитавшись всяких статеек любили добавлять accept_mutex on.
Собственно одной из причин его выключить было, что нам надоели горе-бенчмаркеры, которые запускают nginx и после запуска, без нагрузки рабочие процессы отключают нотификацию о новых соединениях и уходят спать на accept_mutex_delay. После чего бенчмаркер запускает свой славный микробенчмарк и все соединения ловятся одним рабочим процессом, поскольку другие отключили нотификацию.
Почему один процесс NGINX берёт на себя всю работу?