Pull to refresh

Comments 8

UFO just landed and posted this here
Более того, когда будет загружен только один процессор, остальные будут свободно обслуживать систему (хрон, другие программы, программист зашёл логи посмотреть...). Меньше шансов, что подобные мелочи будут влиять на производительность приложения.

Как Это ответ на вопрос, которого нет в статье...


》Почему один процесс NGINX берёт на себя всю работу?

Очень полезная информация для обработки долгоживущих соединений. Например, для nginx-push-stream-module.
Почему один процесс NGINX берёт на себя всю работу?
Потому что accept_mutex включен. Выключите и будет счастье.

В случае epoll-and-accept алгоритм другой: Linux, кажется, выбирает процесс, который был добавлен в очередь ожидания новых соединений последним, т.е. LIFO.
AFAIK, с флагом EPOLLEXCLUSIVE это не так и ждуны добавляются в конец очереди.
Потому что accept_mutex включен. Выключите и будет счастье.

А не наоборот? Он по умолчанию выключен как раз.
«Если accept_mutex включён, рабочие процессы будут принимать новые соединения по очереди. В противном случае о новых соединениях будет сообщаться сразу всем рабочим процессам, и при низкой интенсивности поступления новых соединений часть рабочих процессов может работать вхолостую.»

По умолчанию он был выключен только относительно недавно, в последних версиях. До этого был по умолчанию включен. А ещё многие начитавшись всяких статеек любили добавлять accept_mutex on.


Собственно одной из причин его выключить было, что нам надоели горе-бенчмаркеры, которые запускают nginx и после запуска, без нагрузки рабочие процессы отключают нотификацию о новых соединениях и уходят спать на accept_mutex_delay. После чего бенчмаркер запускает свой славный микробенчмарк и все соединения ловятся одним рабочим процессом, поскольку другие отключили нотификацию.

Автор использовал такую конфигурацию и там accept_mutex явно off в обоих случаях.

Вообще я сам наблюдал описываемый эффект в боевой обстановке (там был NGINX версий 1.9/1.10 и основная нагрузка была в терминировании SSL), но значение accept_mutex не помню.
Sign up to leave a comment.

Articles