Saya punya mesin SLES yang mengakumulasikan koneksi TCP dalam keadaan CLOSE_WAIT untuk apa yang tampaknya selamanya. Deskriptor ini akhirnya menyedot semua memori yang tersedia. Saat ini, saya memiliki 3037 dari mereka, tetapi jauh lebih tinggi sebelum reboot cepat baru-baru ini.
Yang menarik adalah bahwa mereka bukan dari koneksi ke port lokal yang saya harapkan memiliki proses mendengarkan. Mereka tidak memiliki PID terkait, dan penghitung waktu mereka tampaknya telah kedaluwarsa.
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT -
Saya bukan sabuk hitam ketika datang ke tumpukan TCP, atau jaringan kernel, tetapi konfigurasi TCP tampaknya waras, karena nilai-nilai ini adalah default, per halaman manual:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Jadi apa yang menyebabkannya? Jika penghitung waktu kedaluwarsa, bukankah tumpukan harus secara otomatis menghapus hal ini? Saya secara efektif memberi diri saya DoS jangka panjang karena hal-hal ini menumpuk.
sudo netstat -tonp
untuk melihat program mana yang terjadi.