Saya memiliki masalah dalam proses jangka panjang yang disebut kube-proxy yang menjadi bagian dari Kubernetes .
Masalahnya adalah bahwa dari waktu ke waktu koneksi dibiarkan dalam status 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
Koneksi ini menumpuk dari waktu ke waktu membuat proses bertingkah buruk. Saya sudah melaporkan masalah ke pelacak bug Kubernetes tapi saya ingin mengerti mengapa koneksi seperti itu tidak ditutup oleh kernel Linux.
Menurut dokumentasinya (cari tcp_fin_timeout) koneksi dalam status FIN_WAIT2 harus ditutup oleh kernel setelah X detik, di mana X dapat dibaca dari / proc. Di komputer saya sudah diatur ke 60:
$ cat /proc/sys/net/ipv4/tcp_fin_timeout
60
jadi jika saya mengerti benar koneksi seperti itu harus ditutup 60 detik. Tapi ini tidak terjadi, mereka dibiarkan dalam kondisi seperti itu selama berjam-jam.
Walaupun saya juga mengerti bahwa koneksi FIN_WAIT2 sangat tidak biasa (itu berarti tuan rumah sedang menunggu ACK dari ujung remote koneksi yang mungkin sudah hilang) Saya tidak mengerti mengapa koneksi ini tidak "ditutup" oleh sistem .
Apakah ada yang bisa saya lakukan?
Perhatikan bahwa memulai kembali proses terkait adalah pilihan terakhir.