Bisakah saya membuat sesi TCP / IP berjalan kurang dari 60 detik?

8

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

par
sumber
Jika Anda memahami mengapa ini memasuki kondisi TIME_OUT, maka Anda harus memahami mengapa ini diperlukan untuk mencegah serangan dan masalah lainnya. Anda dapat mengurangi batas waktu ini, tetapi ada konsekuensi lain untuk melakukan itu.
davr
Sintaksnya adalah KeepAlive on|off. KeepAlive 0adalah sintaks Apache 1.1; Saya berasumsi Anda tidak menggunakannya.
mark4o
Sesi 1500 T / O tidak membuat sistem Anda tidak responsif. Ada alasan lain.
poige
Apakah koneksi melalui router murah?
LatinSuD

Jawaban:

7

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 sysctluntuk mengurangi net.inet.tcp.mslnilai hingga setengah TIME_WAITdurasi yang diinginkan (dalam milidetik - lihat man -S 4 tcp), misalnya sysctl net.inet.tcp.msl=2500. Waspadalah terhadap implikasi melakukan hal tersebut sehubungan dengan paket pengembaraan yang mungkin tiba setelah TIME_WAITperiode berlalu.

vladr
sumber
Server kami menjalankan Ubuntu, saya telah memperbarui detailnya
par
«1200 - 1500 dari mereka» tidak akan mengubah kalkulator, jadi itu bukan alasan untuk menyetel msl
poige
1

Saya kira maksud Anda TIME_WAIT. Rekan yang memulai penutupan aktif adalah yang masuk TIME_WAIT(lihat diagram transisi keadaan di sini ) jadi jika Anda dapat meminta klien Anda menutup koneksi maka Anda akan memindahkannya TIME_WAITke klien. Lihat jawaban ini untuk detail lebih lanjut dan tautan ke artikel bagus tentang TIME_WAITmasalah 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 RSTdikirim daripada FIN.

Len Holgate
sumber
Oh terima kasih banyak! Tetapi bagaimana saya bisa mengontrol koneksi TCP / IP ketika pengguna memuat file XML dengan Internet Explorer?
par
TIME_WAITadalah normal dan kecuali jika kinerja server Anda menderita karena itu bukan sesuatu yang saya khawatirkan terlalu banyak. Ketika soket di TIME_WAITdalamnya membutuhkan beberapa sumber daya tetapi itu tidak berarti bahwa koneksi masih terbuka atau bahwa server masih memprosesnya.
Len Holgate
0

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 closesoket pada saat itu. Sistem harus dapat menangani puluhan ribu koneksi dalam status TIME_WAIT.

David Schwartz
sumber