Czy w Linuksie jest metoda sprawdzenia, ile portów efemerycznych pozostało dostępnych? Czasami widzę błędy „Adres już używany” w wyniku wyczerpania się efemerycznych portów. Ponowne uruchomienie komputera rozwiązuje ten problem, ale lepiej byłoby go złapać, zanim to nastąpi.
17
Odpowiedzi:
Zakres portów efermalnych jest określony w
/proc/sys/net/ipv4/ip_local_port_range
. Prawdopodobnie możesz go rozszerzyć, aby działał z 16k do 64k.Możesz zobaczyć liczbę otwartych połączeń za pomocą
netstat -an
. Gniazda mogą utknąć w stanie TIME_WAIT, jeśli otwierasz i zamykasz wiele połączeń. W niektórych miejscach jest to nieuniknione, ale w takim przypadku może być konieczne rozważenie, czy potrzebujesz puli połączeń.Jeśli problemem jest TIME_WAIT, możesz ustawić
net.ipv4.tcp_tw_reuse
/,net.ipv4.tcp_tw_recycle
aby przyspieszyć rotację połączenia.źródło
net.ipv4.tcp_tw_recycle
został usunięty w Linuksie 4.12/proc/sys/net/ipv4/ip_local_port_range
musi być podzbiór 49152-65535. Zatem zmniejszenie dolnej granicy zakresu do wartości mniejszej niż 49152 wiąże się z pewnym ryzykiem.Pamiętaj, że ten limit dotyczy pojedynczej krotki (źródłowy adres IP, równorzędny adres IP, port równorzędny). Dlatego musisz zgrupować dane wyjściowe
netstat
/ss
według każdej z tych krotek i sprawdzić, jak blisko każdej grupy jest limit połączenia.W tym poście wyjaśniono bardziej szczegółowo, w jaki sposób można to zrobić. Aby sprawdzić, jak blisko każdej grupy jest limit w Ruby, możesz przetwarzać
ss
dane wyjściowe, takie jak:źródło