Tengo un puerto que está bloqueado por un proceso que necesitaba matar. (un pequeño demonio telnet que se estrelló). El proceso se finalizó correctamente pero el puerto aún se encuentra en un estado 'FIN_WAIT1'. No sale de eso, el tiempo de espera para eso parece estar establecido en 'una década'.
La única forma en que he encontrado para liberar el puerto es reiniciar toda la máquina, que por supuesto es algo que no quiero hacer.
$ netstat -tulnap | grep FIN_WAIT1
tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -
¿Alguien sabe cómo puedo desbloquear este puerto sin reiniciar?
$whateveritwas
antes de sobrescribirlo.Debería poder establecer el tiempo de espera con
/proc/sys/net/ipv4/tcp_fin_timeout
.Realmente no parece haber ninguna forma de limpiar el zócalo manualmente.
fuente
Parece que la configuración tcp_orphan_retries controla cuántos intentos se realizarán antes de liberar un puerto sin servidor. Era 0 aquí, después de establecerlo en 1, los puertos se habían ido.
HTH
fuente
/proc/sys/net/ipv4/tcp_fin_timeout
es el tiempo de espera del estado FIN-WAIT-2, no FIN-WAIT-1. Debes seguir la ruta tcpkill o puedes intentar jugar con los tiempos de keepalive/proc/sys/net/ipv4/tcp_keepalive_*
para forzar una muerte por parte del SO.fuente
Ejecutando estos pasos bajo el ID de raíz y se borró para mí:
Capture la configuración del kernel para cambiar en una variable
Establezca temporalmente los huérfanos máximos en 0
Verifique para asegurarse de que el puerto problemático ya no esté en uso
Espere un poco y repita el paso anterior si es necesario hasta que el comando anterior no devuelva líneas
Restablezca el parámetro del núcleo tcp_max_orphans nuevamente al valor original de la variable anterior
fuente
Su aplicación ha cerrado su lado de la conexión, el socket ahora está esperando que el lado remoto confirme ese cierre. Si tiene un problema con muchos de esos sockets retenidos en FIN_WAIT1, entonces debe seguir los consejos de Manni anteriores.
fuente
En linux kernel> = 4.9 puede usar el
ss
comando de iproute2 con la tecla -Kss -K dst 192.168.1.214 dport = 49029 el núcleo debe compilarse con la opción CONFIG_INET_DIAG_DESTROY habilitada.
a través de /unix//a/511691/43898
fuente
Tal vez tcpkill ayudaría? Más aquí: http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php
fuente
Esto puede ayudar:
fuente