Saya memiliki port yang diblokir oleh proses yang harus saya bunuh. (daemon telnet kecil yang jatuh). Proses ini terbunuh dengan sukses tetapi port tersebut masih dalam status 'FIN_WAIT1'. Itu tidak keluar dari itu, batas waktu untuk itu tampaknya ditetapkan untuk 'satu dekade'.
Satu-satunya cara yang saya temukan untuk membebaskan port adalah me-reboot seluruh mesin, yang merupakan sesuatu yang tidak ingin saya lakukan.
$ netstat -tulnap | grep FIN_WAIT1
tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -
Adakah yang tahu bagaimana saya bisa membebaskan port ini tanpa me-reboot?
$whateveritwas
sebelum menimpanya.Anda harus dapat mengatur batas waktu dengan
/proc/sys/net/ipv4/tcp_fin_timeout
.Sepertinya tidak ada cara untuk membersihkan soket secara manual.
sumber
Tampaknya pengaturan tcp_orphan_retries mengontrol berapa banyak upaya yang akan dilakukan sebelum port tanpa server dilepaskan. Itu 0 di sini, setelah mengaturnya ke 1 port hilang.
HTH
sumber
/proc/sys/net/ipv4/tcp_fin_timeout
adalah batas waktu status FIN-WAIT-2, bukan FIN-WAIT-1. Anda harus pergi dengan rute tcpkill atau Anda dapat mencoba bermain dengan waktu keepalive di bawah/proc/sys/net/ipv4/tcp_keepalive_*
untuk memaksa pembunuhan oleh SO.sumber
Jalankan langkah-langkah ini di bawah ID root dan sudah jelas bagi saya:
Abadikan pengaturan kernel untuk diubah dalam suatu variabel
Tetapkan sementara anak yatim maks ke 0
Periksa untuk memastikan bahwa port yang bermasalah tidak lagi digunakan
Tunggu sedikit dan ulangi langkah di atas jika perlu sampai perintah di atas tidak mengembalikan baris
Atur ulang parameter kernel tcp_max_orphans kembali ke nilai asli dari variabel di atas
sumber
Aplikasi Anda telah menutup sisi sambungannya, soketnya sekarang menunggu sisi jarak jauh untuk mengkonfirmasi penutupan itu. Jika Anda memiliki masalah dengan banyak soket yang ditahan di FIN_WAIT1 maka Anda harus mengikuti saran Manni di atas.
sumber
Di linux kernel> = 4.9 Anda dapat menggunakan
ss
perintah dari iproute2 dengan kunci -Kss -K dst 192.168.1.214 dport = 49029 kernel harus dikompilasi dengan opsi CONFIG_INET_DIAG_DESTROY diaktifkan.
via /unix//a/511691/43898
sumber
Mungkin tcpkill akan membantu? Lebih lanjut di sini: http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php
sumber
ini dapat membantu:
sumber