2009-08-11 9 views
14

Dokumentacja nginx mówi

max_clients = worker_processes * worker_connections 

Ale w jaki sposób keepalive czynnikiem do tego? Mam konfigurację konfiguracji z 2 procesami worker_processes i 8192 employee_connections; to oznacza, że ​​teoretycznie mogę obsłużyć maksymalnie 16384 równoczesnych połączeń. Równoczesne wypychanie 16384 strumieni danych jest ogromne, ale jeśli mam 60 sekund keepalive_timeout, to z każdym klientem pracującym nad połączeniem przez 1 minutę ta liczba ma zupełnie inne znaczenie. Który to jest?

Połączona z tym wszystkim jest zmienna $ connection, która może być używana z dyrektywą log_format. Zdefiniowałem następujący format dziennika, aby przeanalizować wydajność serwera:

log_format perf '$request_time $time_local $body_bytes_sent*$gzip_ratio $connection $pipe $status $request_uri'; 

Ta zmienna połączenia $ zawiera około 11-12 milionów połączeń! Nie jestem matematykiem, ale oczywiście liczba ta jest znacznie wyższa niż worker_processes * employee_connections. Więc co ma reprezentować?

W skrócie, staram się dowiedzieć, jak ustalić dobrą wartość dla worker_connection.

Odpowiedz

9

Połączenie $ to licznik, a nie całkowita liczba używanych połączeń już teraz. Więc ma się rozwijać.

połączenia keepalive nie można wyrzucić, więc pokój jest worker_processes * worker_connections - keepalive połączenia

+0

Licznik! Teraz, kiedy to mówisz, widzę wzór. Dziękuję za odpowiedź na tak niejasne pytanie. – Daniel

1

wyobraź sobie cały obraz: pierwszy klient łączy się z wami, pobiera plik, a następnie przeglądarka utrzymuje połączenie do 60 sekund. inny klient łączy się, pobiera i utrzymuje również swoje połączenie. pod koniec czasu firstrów możesz mieć (w najgorszym przypadku), że wszyscy klienci zażądali od ciebie czegoś w ciągu ostatnich 60 sekund, wciąż utrzymując połączenie otwarte

, więc w najgorszym przypadku będziesz obsługiwać "worker_processes * employee_connections/keep_alive "połączenia w sekundę, czyli około 260 dla twoich numerów. jeśli potrzebujesz więcej, powinieneś przydzielić więcej połączeń - tylko do obsługi keepalives: przeczytaj mój answererr w Tuning nginx worker_process to obtain 100k hits per min

afaik nginx może posiadać 10k nieaktywnych (keepalived) połączeń w 2,5 MB pamięci, więc zwiększenie worker_connections jest tanie, bardzo tanie . Myślę, że głównym wąskim gardłem może być twój system operacyjny.

Powiązane problemy