Làm cách nào để thoát khỏi ổ cắm ở trạng thái FIN_WAIT1?


18

Tôi có một cổng bị chặn bởi một quá trình tôi cần để giết. (một ít daemon telnet bị rơi). Quá trình đã bị giết thành công nhưng cổng vẫn ở trạng thái 'FIN_WAIT1'. Nó không xuất phát từ đó, thời gian chờ dường như được đặt thành 'một thập kỷ'.

Cách duy nhất tôi tìm thấy để giải phóng cổng là khởi động lại toàn bộ máy, đó là điều mà tôi không muốn làm.

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

Có ai biết làm thế nào tôi có thể mở khóa cổng này mà không cần khởi động lại không?

Câu trả lời:


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
nó sẽ cải thiện câu trả lời trước tiên ghi chú $whateveritwastrước khi ghi đè lên nó.
kiểm tra

7

Bạn sẽ có thể đặt thời gian chờ với /proc/sys/net/ipv4/tcp_fin_timeout.

Thực sự không có cách nào để xóa ổ cắm bằng tay.


6
Câu trả lời này không đúng. tcp_orphan_retries ảnh hưởng đến FIN_WAIT1, tcp_fin_timeout ảnh hưởng đến FIN_WAIT2.
suprjami

suprjami là chính xác, tcp_fin_timeout ảnh hưởng đến FIN_WAIT2. Điều này chỉ được kích hoạt khi sử dụng SO_Linger.
Matt

@innaM Bạn có thể xóa câu trả lời này không? Nó không chính xác và tích lũy downvote. Tôi thấy rằng bạn vẫn còn hoạt động, do đó dường như có ý nghĩa nhất để loại bỏ câu trả lời.
Andrew B

@Andrew B: Có vẻ như không thể xóa câu trả lời được chấp nhận.
innaM

6

Có vẻ như cài đặt tcp_orphan_retries kiểm soát số lần thử sẽ được thực hiện trước khi một cổng không có máy chủ được phát hành. Nó là 0 ở đây, sau khi đặt thành 1, các cổng đã biến mất.

HTH


1
Liên quan chặt chẽ: 0 là một mặc định có nghĩa là 8. serverfault.com/a/408882/152073
Andrew B

5

/proc/sys/net/ipv4/tcp_fin_timeoutlà thời gian chờ của trạng thái FIN-WAIT-2, không phải FIN-WAIT-1. Bạn nên đi với tuyến đường tcpkill hoặc bạn có thể cố gắng chơi với thời gian cố định bên dưới /proc/sys/net/ipv4/tcp_keepalive_*để buộc SO giết.


2

Chạy các bước này dưới ID gốc và nó đã xóa cho tôi:

Chụp cài đặt kernel để thay đổi trong một biến

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

Tạm thời đặt trẻ mồ côi tối đa thành 0

$ sysctl -w net.ipv4.tcp_max_orphans=0

Kiểm tra để đảm bảo rằng cổng có vấn đề không còn được sử dụng

$ netstat -np|grep 9716

Đợi một chút và lặp lại bước trên nếu cần cho đến khi lệnh trên không trả về dòng nào

Đặt lại tham số kernel tcp_max_orphans trở về giá trị ban đầu từ biến ở trên

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

Xin chào, Chào mừng bạn đến với Serverfault. Tôi đã chỉnh sửa bài đăng của bạn để làm cho định dạng câu trả lời của bạn phù hợp hơn với các câu trả lời khác trên trang web này. Đối với câu trả lời tiếp theo của bạn, vui lòng không sử dụng nhiều tiêu đề như bạn đã làm ở đây và xem xét lấy các câu trả lời khác làm mẫu cho câu trả lời của riêng bạn. Cảm ơn sự đóng góp của bạn mặc dù. Tận hưởng chuyến đi của bạn trên serverfault.
Richard

1

FIN_WAIT1

Ứng dụng trên máy cục bộ đã đóng kết nối. Dấu hiệu này đã được gửi đến máy từ xa.

Ứng dụng của bạn đã đóng bên kết nối, ổ cắm hiện đang chờ phía từ xa để xác nhận đóng. Nếu bạn gặp vấn đề với rất nhiều ổ cắm bị giữ trong FIN_WAIT1 thì bạn nên làm theo lời khuyên của Manni ở trên.


0

Trên kernel linux> = 4.9, bạn có thể sử dụng sslệnh từ iproute2 với khóa -K

ss -K dst 192.168.1.214 dport = 49029 hạt nhân phải được biên dịch với tùy chọn CONFIG_INET_DIAG_DESTROY được bật.

qua /unix//a/511691/43898



-4

điều này có thể giúp:

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
Nó có thể giúp nếu bạn giải thích tất cả những gì đó là. Chúng tôi là những chuyên gia, và như vậy, chúng tôi không dán những thứ đó một cách mù quáng và hy vọng nó có ích.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.