Como faço para me livrar de soquetes no estado FIN_WAIT1?

18

Eu tenho uma porta bloqueada por um processo que precisei matar. (um pequeno daemon telnet que caiu). O processo foi morto com sucesso, mas a porta ainda está no estado 'FIN_WAIT1'. Não sai disso, o tempo limite para isso parece ser definido como "uma década".

A única maneira que encontrei para liberar a porta é reinicializar a máquina inteira, o que, é claro, é algo que eu não quero fazer.

$ netstat -tulnap | grep FIN_WAIT1 
tcp        0  13937 10.0.0.153:4000         10.0.2.46:2572          FIN_WAIT1  -

Alguém sabe como posso desbloquear esta porta sem reiniciar?

    
por Gert M 13.05.2009 / 10:40

8 respostas

14
# 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
    
por 15.10.2014 / 16:54
7

Você deve poder definir o tempo limite com /proc/sys/net/ipv4/tcp_fin_timeout .

Realmente não parece haver nenhuma maneira de limpar o soquete manualmente.

    
por 13.05.2009 / 11:32
6

Parece que a configuração tcp_orphan_retries controla quantas tentativas serão feitas antes que uma porta sem servidor seja liberada. Foi 0 aqui, depois de configurá-lo para 1, os portos foram embora.

HTH

    
por 28.12.2010 / 12:35
4

/proc/sys/net/ipv4/tcp_fin_timeout é o tempo limite do estado FIN-WAIT-2, não FIN-WAIT-1. Você deve ir com a rota tcpkill ou pode tentar jogar com os tempos de keepalive sob /proc/sys/net/ipv4/tcp_keepalive_* para forçar um kill pelo SO.

    
por 14.10.2009 / 16:15
2

Execução destes passos sob o ID da raiz e limpo para mim:

Capture a configuração do kernel para alterar em uma variável

$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')

Defina temporariamente o máximo de órfãos para 0

$ sysctl -w net.ipv4.tcp_max_orphans=0

Verifique se a porta problemática não está mais em uso

$ netstat -np|grep 9716

Espere um pouco e repita o passo acima, se necessário, até que o comando acima não retorne nenhuma linha

Redefina o parâmetro do kernel tcp_max_orphans de volta ao valor original da variável acima

$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans
    
por 23.07.2015 / 00:46
1

FIN_WAIT1

The application on local machine has closed the connection. Indication of this has been sent to the remote machine.

Sua aplicação fechou seu lado da conexão, o soquete está aguardando o lado remoto para confirmar o fechamento. Se você tem um problema com muitos desses sockets sendo mantidos em FIN_WAIT1 então você deve seguir o conselho de Manni acima.

    
por 13.05.2009 / 13:15
-1

Talvez tcpkill ajudaria? Mais aqui: link

    
por 13.05.2009 / 12:18
-4

isso pode ajudar:

net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 2
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0
    
por 23.03.2013 / 07:01