Řešení 1:
# record what tcp_max_orphans's current value
original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans)
#set the tcp_max_orphans to 0 temporarily
echo 0 > /proc/sys/net/ipv4/tcp_max_orphans
# watch /var/log/messages
# it will split out "kernel: TCP: too many of orphaned sockets"
# it won't take long for the connections to be killed
# restore the value of tcp_max_orphans whatever it was before.
echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans
# verify with
netstat -an|grep FIN_WAIT1
Řešení 2:
Měli byste být schopni nastavit časový limit pomocí /proc/sys/net/ipv4/tcp_fin_timeout
.
Opravdu se nezdá, že by existoval způsob, jak vymazat zásuvku ručně.
Řešení 3:
Zdá se, že nastavení tcp_orphan_retries řídí, kolik pokusů bude provedeno, než bude uvolněn port bez serveru. Tady to bylo 0, po nastavení na 1 byly porty pryč.
HTH
Řešení 4:
/proc/sys/net/ipv4/tcp_fin_timeout
je časový limit stavu FIN-WAIT-2, nikoli FIN-WAIT-1. Měli byste jít cestou tcpkill nebo si můžete zkusit pohrát s časy udržování života pod /proc/sys/net/ipv4/tcp_keepalive_*
vynutit zabití SO.
Řešení 5:
Spuštěním těchto kroků pod root ID a vymazáno:
Zachyťte nastavení jádra, které se má změnit, do proměnné
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Dočasně nastavte maximální počet sirotků na 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Zkontrolujte, zda se problematický port již nepoužívá
$ netstat -np|grep 9716
Chvíli počkejte a v případě potřeby opakujte výše uvedený krok, dokud výše uvedený příkaz nevrátí žádné řádky
Resetujte parametr jádra tcp_max_orphans zpět na původní hodnotu z proměnné výše
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans