FIN_WAIT1 durumundaki soketlerden nasıl kurtulurum?


18

Öldürmem gereken bir işlemle engellenen bir limanım var. (çökmüş küçük bir telnet arka plan programı). İşlem başarıyla öldürüldü, ancak bağlantı noktası hala 'FIN_WAIT1' durumunda. Bundan çıkmıyor, bunun için zaman aşımı 'on yıl' olarak ayarlanmış gibi görünüyor.

Bağlantı noktasını serbest bırakmanın tek yolu, tüm makineyi yeniden başlatmaktır, bu da yapmak istemediğim bir şeydir.

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

Herkes yeniden başlatmadan bu bağlantı noktasının engelini kaldırmak nasıl biliyor?

Yanıtlar:


18
# 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

2
$whateveritwasüzerine yazmadan önce not almak cevabı geliştirecektir .
haventchecked

7

İle zaman aşımını ayarlayabilmeniz gerekir /proc/sys/net/ipv4/tcp_fin_timeout.

Soketi manuel olarak temizlemenin hiçbir yolu yok gibi görünüyor.


6
Bu cevap doğru değil. tcp_orphan_retries FIN_WAIT1'i etkiler, tcp_fin_timeout FIN_WAIT2'yi etkiler.
suprjami

suprjami doğrudur, tcp_fin_timeout FIN_WAIT2'yi etkiler. Hangi sadece SO_LINGER kullanılırken tetiklenir.
Matt

@innaM Lütfen bu yanıtı kaldırabilir misiniz? Doğru ve biriken downvotes değil. Hala aktif olduğunuzu görüyorum, bu nedenle cevabı kaldırmak en mantıklı görünüyor.
Andrew B

@Andrew B: Kabul edilen cevapları silmek mümkün görünmüyor.
innaM

6

Görünüşe göre tcp_orphan_retries ayarı, sunucusuz bir bağlantı noktası serbest bırakılmadan önce kaç denemenin yapılacağını denetler. Burada 0, 1 olarak ayarlandıktan sonra portlar gitmişti.

HTH


1
Yakından ilgili: 0 varsayılan
Andrew B

5

/proc/sys/net/ipv4/tcp_fin_timeoutFIN-WAIT-1 durumunun zaman aşımıdır, FIN-WAIT-1 değil. Eğer tcpkill rotası ile gitmek gerekir ya /proc/sys/net/ipv4/tcp_keepalive_*da SO tarafından bir öldürmeye zorlamak için altında tutma süreleri ile oynamaya çalışabilirsiniz .


2

Bu adımları root ID altında çalıştırmak ve benim için temizlendi:

Bir değişkeni değiştirmek için çekirdek ayarını yakalayın

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

Maksimum yetimleri geçici olarak 0 olarak ayarlayın

$ sysctl -w net.ipv4.tcp_max_orphans=0

Sorunlu bağlantı noktasının artık kullanılmadığından emin olun

$ netstat -np|grep 9716

Biraz bekleyin ve yukarıdaki komut satır döndürmeyene kadar gerekirse yukarıdaki adımı tekrarlayın

Tcp_max_orphans çekirdek parametresini yukarıdaki değişkenin orijinal değerine sıfırlayın

$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans

Merhaba, Serverfault'a hoş geldiniz. Yanıtınızı biçimlendirmeyi bu sitedeki diğer yanıtlarla daha tutarlı hale getirmek için yayınınızı düzenledim. Bir sonraki cevabınız için lütfen burada yaptığınız kadar başlık kullanmayın ve diğer cevapları kendi cevaplarınız için bir şablon olarak almayı düşünün. Yine de katkınız için teşekkürler. Serverfault üzerinde sürüş keyfini çıkarın.
Richard

1

FIN_WAIT1

Yerel makinedeki uygulama bağlantıyı kapattı. Bunun göstergesi uzak makineye gönderildi.

Uygulamanız bağlantının yanını kapattı, soket artık uzak tarafın bu kapatmayı onaylamasını bekliyor. Bu soketlerin çoğunun FIN_WAIT1'de tutulmasıyla ilgili bir sorununuz varsa, yukarıdaki Manni'nin tavsiyelerine uymalısınız.


0

Linux çekirdeği> = 4.9'da ssiproute2 komutunu -K tuşuyla kullanabilirsiniz

ss -K dst 192.168.1.214 dport = 49029 çekirdek CONFIG_INET_DIAG_DESTROY seçeneği etkin olarak derlenmelidir.

/unix//a/511691/43898 aracılığıyla



-4

bu yardımcı olabilir:

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

6
Tüm bunların ne olduğunu açıklarsanız yardımcı olabilir. Biz profesyoneliz ve bu nedenle, şeyleri körü körüne yapıştırmıyoruz ve yardımcı olacağını umuyoruz.
Michael Hampton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.