मैं FIN_WAIT1 राज्य में सॉकेट से कैसे छुटकारा पा सकता हूं?


18

मेरे पास एक बंदरगाह है जिसे मुझे मारने के लिए आवश्यक प्रक्रिया द्वारा अवरुद्ध किया गया है। (थोड़ा टेलनेट डेमन जो दुर्घटनाग्रस्त हो गया)। प्रक्रिया सफलतापूर्वक मार दी गई थी लेकिन बंदरगाह अभी भी 'FIN_WAIT1' राज्य में है। यह इससे बाहर नहीं आता है, इसके लिए समय सीमा 'एक दशक' के लिए निर्धारित लगती है।

एकमात्र तरीका जो मैंने पोर्ट को मुक्त करने के लिए पाया है वह पूरी मशीन को रिबूट करना है, जो कि कुछ ऐसा है जो मैं नहीं करना चाहता हूं।

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

क्या किसी को पता है कि मैं रिबूट किए बिना इस पोर्ट को कैसे अनब्लॉक कर सकता हूं?

जवाबों:


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इससे पहले कि इसे ओवरराइट करने से पहले नोट बनाने के जवाब में सुधार होगा ।
haventchecked

7

आपको टाइमआउट सेट करने में सक्षम होना चाहिए /proc/sys/net/ipv4/tcp_fin_timeout

वहाँ वास्तव में सॉकेट को मैन्युअल रूप से साफ़ करने का कोई तरीका नहीं लगता है।


6
यह उत्तर सही नहीं है। tcp_orphan_retries FIN_WAIT1 को प्रभावित करता है, tcp_fin_timeout FIN_WAIT2 को प्रभावित करता है।
सुपरजामी

suprjami सही है, tcp_fin_timeout FIN_WAIT2 को प्रभावित करता है। जो SO_LINGER का उपयोग करते समय केवल ट्रिगर किया गया है।
मैट

@innaM क्या आप इस उत्तर को हटा सकते हैं? यह सही नहीं है और नीचे की ओर जमा हो रहा है। मैं देखता हूं कि आप अभी भी सक्रिय हैं, इसलिए उत्तर को हटाने के लिए सबसे अधिक समझ में आता है।
एंड्रयू बी

@Andrew B: ऐसा लगता है कि स्वीकृत उत्तरों को हटाना संभव नहीं है।
इन्नाएम

6

ऐसा लगता है कि tcp_orphan_retries सेटिंग यह नियंत्रित करती है कि सर्वर-कम पोर्ट जारी होने से पहले कितने प्रयास किए जाएंगे। यह यहां 0 था, इसे 1 पर सेट करने के बाद पोर्ट चले गए थे।

HTH


1
निकटता से संबंधित: 0 एक डिफ़ॉल्ट है जिसका अर्थ है 8. सर्वरफॉल्ट
एंड्रयू बी

5

/proc/sys/net/ipv4/tcp_fin_timeoutफिन-वॉइट -2 राज्य का समय-निर्धारण है, न कि फिन-वॉइट -1। आपको tcpkill रूट के साथ जाना चाहिए या आप /proc/sys/net/ipv4/tcp_keepalive_*SO के द्वारा मारने के लिए मजबूर करने के लिए रखने वाले समय के साथ खेलने का प्रयास कर सकते हैं ।


2

रूट आईडी के तहत इन चरणों को चलाने और यह मेरे लिए मंजूरी दे दी:

एक चर में बदलने के लिए कर्नेल सेटिंग को कैप्चर करें

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

अस्थायी रूप से अधिकतम अनाथों को 0 पर सेट करें

$ sysctl -w net.ipv4.tcp_max_orphans=0

यह सुनिश्चित करने के लिए जांचें कि समस्याग्रस्त पोर्ट अब उपयोग में नहीं है

$ netstat -np|grep 9716

थोड़ी प्रतीक्षा करें और ऊपर चरण को दोहराएं जब तक कि ऊपर से कोई आदेश न आए

ऊपर दिए गए चर से मूल मान पर वापस tcp_max_orphans कर्नेल पैरामीटर रीसेट करें

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

नमस्ते, सर्वरफ़ॉल्ट में आपका स्वागत है। मैंने इस साइट पर अन्य उत्तरों के साथ आपके उत्तर के प्रारूपण को अधिक सुसंगत बनाने के लिए आपकी पोस्ट को संपादित किया। कृपया अपने अगले उत्तर के लिए कृपया उतने शीर्षक का उपयोग न करें जितना आपने यहाँ किया था और अन्य उत्तरों को अपने स्वयं के उत्तरों के लिए एक टेम्पलेट के रूप में लेने पर विचार करें। हालांकि आपके योगदान के लिए धन्यवाद। सर्वरफॉल्ट पर अपनी सवारी का आनंद लें।
रिचर्ड

1

FIN_WAIT1

स्थानीय मशीन पर एप्लिकेशन ने कनेक्शन बंद कर दिया है। इसका संकेत रिमोट मशीन को भेजा गया है।

आपने एप्लिकेशन कनेक्शन का अपना पक्ष बंद कर दिया है, सॉकेट अब उस बंद की पुष्टि के लिए दूरस्थ पक्ष की प्रतीक्षा कर रहा है। यदि आपको बहुत सारी परेशानियों से जूझना पड़ रहा है, तो आप FIN_WAIT1 में हैं, तो आपको मन्नी की सलाह का पालन करना चाहिए।


0

लिनक्स कर्नेल पर = = 4.9 आप ssकुंजी -K के साथ iproute2 से कमांड का उपयोग कर सकते हैं

ss -K dst 192.168.1.214 dport = 49029 कर्नेल को CONFIG_INET_DIAG_DESTROY सक्षम विकल्प के साथ संकलित किया जाना है।

/unix//a/511691/43898 के माध्यम से



-4

यह मदद कर सकता है:

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
यदि आपको यह समझाने में मदद मिल सकती है कि वह सब क्या है। हम पेशेवर हैं, और इस तरह, हम आँख बंद करके सामान को पेस्ट नहीं करते हैं और आशा है कि यह मदद करता है।
माइकल हैम्पटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.