Dlaczego „multi_accept” jest wyłączony jako domyślny w Nginx?

17

Odkryłem, że „multi_accept” jest domyślnie wyłączone w Nginx w następujący sposób:

multi_accept

Max Zueff
źródło

Odpowiedzi:

13

Prawdopodobnie dlatego, że po włączeniu wszystkie procesy robocze są aktywne i próbują obsłużyć wszystkie przychodzące żądania jednocześnie. Po wyłączeniu Nginx decyduje, który proces potomny będzie rozpatrywał żądanie jeden po drugim. Ponieważ Nginx jest w tym bardzo wydajny, prawdopodobnie służy to większości ludzi. Niektórzy uważają, że włączenie go jest ryzykowne, ponieważ może zalewać połączenia pracowników żądaniami. Twoje ustawienia TCP na poziomie systemu operacyjnego prawdopodobnie również będą w tym uczestniczyć.

JayMcTee
źródło
3
Miałem dokładną sytuację. Próbowałem dowiedzieć się, co robią automatyczne komendy robot_rlimit_nofile, worker_connections i worker_processes. Nginx to zwrotny serwer proxy dla aplikacji, która akceptuje gniazda sieciowe. Konfiguracja Nginx pozwala na 50 połączeń dla każdego pracownika. Kiedy mam dwóch pracowników (dlatego należy ustanowić 100 połączeń) i włączona jest funkcja multi_accept, pojawia się błąd, że nie można utworzyć gniazd internetowych (pracownik, który ma już 50 połączeń, próbuje ...). Gdy multi_accept jest wyłączony, wszystko działa idealnie.
Hamburml