Solución:
Solución 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
Solucion 2:
Debería poder establecer el tiempo de espera con /proc/sys/net/ipv4/tcp_fin_timeout
.
Realmente no parece haber ninguna forma de borrar el socket manualmente.
Solución 3:
Parece que la configuración tcp_orphan_retries controla cuántos intentos se realizarán antes de que se libere un puerto sin servidor. Era 0 aquí, después de establecerlo en 1, los puertos desaparecieron.
HTH
Solución 4:
/proc/sys/net/ipv4/tcp_fin_timeout
es el tiempo de espera del estado FIN-WAIT-2, no FIN-WAIT-1. Deberías seguir la ruta tcpkill o puedes intentar jugar con los tiempos de keepalive debajo /proc/sys/net/ipv4/tcp_keepalive_*
para forzar una matanza por parte del SO.
Solución 5:
Ejecutando estos pasos bajo el ID de root y se me borró:
Capture la configuración del kernel para cambiar una variable
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Establezca temporalmente el número máximo de huérfanos en 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Verifique para asegurarse de que el puerto problemático ya no esté en uso
$ netstat -np|grep 9716
Espere un poco y repita el paso anterior si es necesario hasta que el comando anterior no devuelva ninguna línea
Restablezca el parámetro del kernel tcp_max_orphans al valor original de la variable anterior
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans