J'ai un port bloqué par un processus que je devais tuer. (un petit démon telnet qui s'est planté). Le processus a été tué avec succès mais le port est toujours dans un état «FIN_WAIT1». Cela n'en sort pas, le délai d'attente semble être fixé à «une décennie».
Le seul moyen que j'ai trouvé pour libérer le port est de redémarrer la machine entière, ce qui est bien sûr quelque chose que je ne veux pas faire.
$ netstat -tulnap | grep FIN_WAIT1
tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -
Est-ce que quelqu'un sait comment je peux débloquer ce port sans redémarrer?
$whateveritwas
avant de l'écraser.Vous devriez pouvoir définir le délai d'expiration avec
/proc/sys/net/ipv4/tcp_fin_timeout
.Il ne semble vraiment pas y avoir de moyen d'effacer le socket manuellement.
la source
Il semble que le paramètre tcp_orphan_retries contrôle le nombre de tentatives qui seront effectuées avant qu'un port sans serveur ne soit libéré. C'était 0 ici, après l'avoir mis à 1, les ports avaient disparu.
HTH
la source
/proc/sys/net/ipv4/tcp_fin_timeout
est le délai d'expiration de l'état FIN-WAIT-2, et non FIN-WAIT-1. Vous devriez suivre la route tcpkill ou vous pouvez essayer de jouer avec les temps de Keepalive sous/proc/sys/net/ipv4/tcp_keepalive_*
pour forcer un kill par le SO.la source
L'exécution de ces étapes sous l'ID racine et cela m'a effacé:
Capturez le paramètre du noyau à modifier dans une variable
Définissez temporairement le nombre maximal d'orphelins sur 0
Vérifiez que le port problématique n'est plus utilisé
Attendez un peu et répétez l'étape ci-dessus si nécessaire jusqu'à ce que la commande ci-dessus ne renvoie aucune ligne
Réinitialisez le paramètre du noyau tcp_max_orphans à la valeur d'origine à partir de la variable ci-dessus
la source
Votre application a fermé son côté de la connexion, le socket attend maintenant que le côté distant confirme cette fermeture. Si vous avez un problème avec un grand nombre de ces prises détenues dans FIN_WAIT1, vous devez suivre les conseils de Manni ci-dessus.
la source
Sur le noyau Linux> = 4.9, vous pouvez utiliser la
ss
commande d'iproute2 avec la clé -Kss -K dst 192.168.1.214 dport = 49029 le noyau doit être compilé avec l'option CONFIG_INET_DIAG_DESTROY activée.
via /unix//a/511691/43898
la source
Peut-être que tcpkill aiderait? Plus ici: http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php
la source
cela peut aider:
la source