Skocz do zawartości
gutek

Możliwa ilość polączeń socket na linuxie

Polecane posty

Mam pytanie jaka jest maksymalna liczba określająca wartość połączeń jakie można nawiązać na socketach, tzn czy jest to ograniczenie numerami portów czy otwartych plików w linuxie ? Ewentualnie który parametr wymaga zmiany aby można było nawiązać dużą liczbę połączeń, dużą znaczy > 10000 / max minutę ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zależy jakich socketach. Unix sockety i sockety np. TCP działają zupełnie inaczej, bo te pierwsze są limitowane ilością otwartych plików, a te drugie liczbą wolnych portów.

 

Limity socketów TCP możesz łatwo podejrzeć poprzez sysctl:

 

 

sysctl net.ipv4.ip_local_port_range

 

Przykładowo u mnie, i zapewne w domyślnych settingsach również, jest to range 32768-61000, co oznacza że możesz mieć w danym momencie otwarte nie więcej niż 28232 połączeń TCP w stanie aktywnym (zajmującym port).

 

Sprawa unix socketów jest jeszcze prostsza bo te są limitowane maksymalną ilością otwartych file descriptorów w danym momencie.

 

 

cat /proc/sys/fs/file-max

 

U mnie 201709.

 

Jeśli zaczyna Ci brakować socketów TCP to na ogół jest to wina złej konfiguracji lub złych założeń aplikacji/serwisu.

 

Pierwszym najważniejszym czynnikiem jest zmniejszenie maksymalnego czasu nieaktywności połączenia TCP przed zamknięciem socketu:

 

 

sysctl net.ipv4.tcp_fin_timeout

 

Domyślnie jest to 60 sekund, co jest dobre na niestabilne połączenia, ale może być zmniejszone nawet do ~15 co również powinno być zadowalające.

 

Drugim jest limitowanie maksymalnej ilości aktywnych połączeń na IP po stronie serwera (np. iptables). User nie powinien mieć większego przydziału niż ~200-300 jeśli nie chcesz dopuścić do wysycenia wolnych socketów.

 

Trzecim już jest strona aplikacji/serwisu. Web kontroluje web server i nie ma tutaj żadnych problemów, ale jeśli piszesz coś sam (np. w javie) to powinieneś się upewnić, że otwierasz sockety najpóźniej jak się da, i je zamykasz najwcześniej jak się da. To jest ogólna zasada działania z limitowanymi zasobami - używamy ich najpóźniej jak się da w naszej aplikacji, i zwalniamy je najwcześniej jak się da.

 

Jeśli zastosujesz się do wszystkich powyższych rad, twój serwer bez większych problemów będzie w stanie przyjmować 10-20k unikalnych połączeń na sekundę, przy założeniu, że sekunda wystarczy do przesłania danych i zamknięcia połączenia. Rzadko kiedy potrzebujesz czegoś więcej, ale jeśli tak to możesz jeszcze zerknąć na net.ipv4.tcp_tw_recycle i net.ipv4.tcp_tw_reuse.

Edytowano przez Archi (zobacz historię edycji)
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×