Solusi 1:
# 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
Solusi 2:
Anda harus dapat mengatur batas waktu dengan /proc/sys/net/ipv4/tcp_fin_timeout
.
Sepertinya tidak ada cara untuk menghapus soket secara manual.
Solusi 3:
Tampaknya pengaturan tcp_orphan_retries mengontrol berapa banyak upaya yang akan dilakukan sebelum port tanpa server dirilis. Itu 0 di sini, setelah menyetelnya ke 1 port hilang.
HTH
Solusi 4:
/proc/sys/net/ipv4/tcp_fin_timeout
adalah batas waktu status FIN-WAIT-2, bukan FIN-WAIT-1. Anda harus menggunakan rute tcpkill atau Anda dapat mencoba bermain dengan waktu keepalive di bawah /proc/sys/net/ipv4/tcp_keepalive_*
untuk memaksa pembunuhan oleh SO.
Solusi 5:
Menjalankan langkah-langkah ini di bawah root ID dan itu beres untuk saya:
Tangkap pengaturan kernel untuk diubah dalam variabel
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Tetapkan sementara anak yatim maksimum ke 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Periksa untuk memastikan bahwa port yang bermasalah tidak lagi digunakan
$ netstat -np|grep 9716
Tunggu sebentar dan ulangi langkah di atas jika diperlukan hingga perintah di atas tidak mengembalikan baris
Setel ulang parameter kernel tcp_max_orphans kembali ke nilai asli dari variabel di atas
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans