Porównaj ceny domen i usług IT, sprzedawców z całego świata

Nginx osiągnął limit work_connections


Używam serwera Nginx, który okresowo zrzuca kilka połączeń, po sprawdzeniu dzienników widzę to
       worker_connections
osiągnięto limit np.
2019/12/06 08:37:09 [alert] 14517#14517: 25000 worker_connections are not enough

Z moich metryk widzę, że Nginx zaczyna zrywać połączenia po osiągnięciu 20 tys. Aktywnych połączeń, mimo że jest 32 (automatycznych) pracowników, z których każdy powinien być w stanie obsłużyć 25 000 połączeń (jeśli dobrze rozumiem).
Rzeczy, których próbowałem:
  • Zwiększenie limitu work_connection
  • Obrócony
             multi_accept       
    na
  • Epoll włączony - widziałem, że większość obciążenia była obsługiwana przez 2-3 procesy robocze, a inne były ledwo używane, chociaż nie wydawało się to pomagać w sytuacji, ponieważ PID pokazany w dzienniku błędów jest prawie zawsze taki sam do przetworzenia .

Jestem naprawdę zdumiony, czego jeszcze spróbować, jeśli ktoś ma jakieś sugestie, co może być tego przyczyną, bylibyśmy bardzo wdzięczni.
Inne ważne informacje:
  • 32 procesory, 64 GB pamięci
  • Ubuntu v18.04.3
  • Połączenia są przekazywane przez serwer proxy
  • Nginx produkuje średnio około 400 RPS.

Pełną konfigurację można znaleźć tutaj:

https://gist.github.com/mrcnko ... d48a7
https://gist.github.com/mrcnko ... d48a7

AKTUALIZACJA:

Zaczęliśmy używać
       reuseport
co wydaje się powstrzymać problem zrzucania połączeń, tak jak wygląda obciążenie

wiele

bardziej równomiernie rozłożone na przepływy pracy, zamiast pojedynczego przepływu pracy obsługującego większość obciążenia. Wydaje się, że jest to niewłaściwe rozwiązanie problemu, ponieważ wydaje się, że nginx powinien być w stanie obsłużyć więcej połączeń na tym serwerze, biorąc pod uwagę specyfikacje serwera, więc jeśli ktoś ma jakieś sugestie, bylibyśmy bardzo wdzięczni.
Zaproszony:

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się