it-swarm-vi.tech

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

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?

20
Gert M
# 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
19
IdaWong

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.

7
innaM

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. Đó là 0 ở đây, sau khi đặt thành 1, các cổng đã biến mất.

HTH

6
user64877

/proc/sys/net/ipv4/tcp_fin_timeout là 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ể thử chơi với thời gian cố định trong /proc/sys/net/ipv4/tcp_keepalive_* để giết chết bởi SO.

5
Fabricio González

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
2
Rad Mandapati

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.

1
Dave Cheney

Trên kernel linux> = 4.9, bạn có thể sử dụng lệnh ss 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.

thông qua https://unix.stackexchange.com/a/511691/43898

0
eri