Tôi có một vấn đề trong một quá trình tồn tại lâu dài được gọi là kube-proxy là một phần của Kubernetes .
Vấn đề là đôi khi một kết nối bị bỏ lại ở trạng thái FIN_WAIT2.
$ sudo netstat -tpn | grep FIN_WAIT2
tcp6 0 0 10.244.0.1:33132 10.244.0.35:48936 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:48340 10.244.0.35:56339 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:52619 10.244.0.35:57859 FIN_WAIT2 14125/kube-proxy
tcp6 0 0 10.244.0.1:33132 10.244.0.50:36466 FIN_WAIT2 14125/kube-proxy
Các kết nối này chồng lên nhau theo thời gian làm cho quá trình hoạt động sai. Tôi đã báo cáo sự cố với trình theo dõi lỗi Kubernetes nhưng tôi muốn hiểu tại sao các kết nối như vậy không bị nhân Linux đóng.
Theo tài liệu của nó (tìm kiếm tcp_fin_timeout) kết nối ở trạng thái FIN_WAIT2 sẽ được đóng bởi kernel sau X giây, trong đó X có thể được đọc từ / Proc. Trên máy của tôi, nó được đặt thành 60:
$ cat /proc/sys/net/ipv4/tcp_fin_timeout
60
vì vậy nếu tôi hiểu chính xác thì các kết nối như vậy sẽ bị đóng trong 60 giây. Nhưng đây không phải là trường hợp, họ bị bỏ lại trong tình trạng như vậy trong nhiều giờ.
Mặc dù tôi cũng hiểu rằng các kết nối FIN_WAIT2 khá bất thường (điều đó có nghĩa là máy chủ đang chờ một số ACK từ đầu kết nối từ xa có thể đã biến mất) Tôi không hiểu tại sao các kết nối này không bị "đóng" bởi hệ thống .
Có bất cứ điều gì tôi có thể làm về nó?
Lưu ý rằng khởi động lại quá trình liên quan là biện pháp cuối cùng.