gutek 23 Zgłoś post Napisano Sierpień 28, 2015 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
Pan Kot 1535 Zgłoś post Napisano Sierpień 29, 2015 (edytowany) 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 Sierpień 29, 2015 przez Archi (zobacz historię edycji) 1 Udostępnij ten post Link to postu Udostępnij na innych stronach