Server kami kelebihan beban dengan sesi TCP / IP, kami memiliki 1200 - 1500 di antaranya. Sebagian besar dari mereka tergantung dalam keadaan TIME_OUT. Ternyata koneksi dalam status TIME_OUT menempati soket hingga batas waktu 60 detik berlalu.
Masalahnya adalah server menjadi tidak responsif dan banyak klien tidak dilayani.
Saya telah membuat tes sederhana: unduh file XML dari server dengan Internet Explorer 8.0 Unduhan selesai dalam sepersekian detik. Tapi kemudian saya melihat bahwa koneksi TCP / IP dalam keadaan TIME_OUT tergantung selama 60 detik.
Apakah ada cara untuk menyingkirkan TIME_OUT menunggu atau membuatnya lebih sedikit untuk membebaskan soket untuk koneksi baru?
Saya mengerti mengapa koneksi TCP / IP memasuki keadaan TIME_OUT, tapi saya tidak mengerti mengapa Internet Explorer tidak menutup koneksi setelah pengunduhan file XML selesai.
Rinciannya.
Server kami menjalankan layanan web yang ditulis dalam Perl (mod-perl). Layanan ini menyediakan data cuaca untuk klien. Klien adalah aplikasi Flash (sebenarnya kontrol Flash ActiveX tertanam di aplikasi Windows).
OS: Ubuntu
Opsi Apache "Keep Alive" diatur ke 0
sumber
KeepAlive on|off
.KeepAlive 0
adalah sintaks Apache 1.1; Saya berasumsi Anda tidak menggunakannya.Jawaban:
Ini adalah pengaturan dalam tumpukan TCP Anda. Karena kami tidak tahu platform apa yang Anda gunakan, kami tidak dapat mengatakan dengan tepat apa namanya dan bagaimana mengubahnya.
MEMPERBARUI
Jadi, Anda menggunakan Ubuntu. Anda dapat menggunakan
sysctl
untuk menguranginet.inet.tcp.msl
nilai hingga setengahTIME_WAIT
durasi yang diinginkan (dalam milidetik - lihatman -S 4 tcp
), misalnyasysctl net.inet.tcp.msl=2500
. Waspadalah terhadap implikasi melakukan hal tersebut sehubungan dengan paket pengembaraan yang mungkin tiba setelahTIME_WAIT
periode berlalu.sumber
Saya kira maksud Anda
TIME_WAIT
. Rekan yang memulai penutupan aktif adalah yang masukTIME_WAIT
(lihat diagram transisi keadaan di sini ) jadi jika Anda dapat meminta klien Anda menutup koneksi maka Anda akan memindahkannyaTIME_WAIT
ke klien. Lihat jawaban ini untuk detail lebih lanjut dan tautan ke artikel bagus tentangTIME_WAIT
masalah dan cara mengatasinya.Alternatif lain, jika Anda tidak bisa membuat klien menutup aktif, adalah untuk mengatur ulang koneksi dengan mengatur berlama-lama sebelum menutupnya. Ini menyebabkan suatu
RST
dikirim daripadaFIN
.sumber
TIME_WAIT
adalah normal dan kecuali jika kinerja server Anda menderita karena itu bukan sesuatu yang saya khawatirkan terlalu banyak. Ketika soket diTIME_WAIT
dalamnya membutuhkan beberapa sumber daya tetapi itu tidak berarti bahwa koneksi masih terbuka atau bahwa server masih memprosesnya.Server yang tidak responsif kemungkinan tidak ada hubungannya dengan jumlah koneksi dalam status TIME_WAIT. Tidak jelas apa yang Anda maksud dengan "menempati soket" - server seharusnya sudah lama memiliki
close
soket pada saat itu. Sistem harus dapat menangani puluhan ribu koneksi dalam status TIME_WAIT.sumber