GNU/Linux >> Belajar Linux >  >> Linux

Apa yang membatasi jumlah maksimum koneksi di server Linux?

Solusi 1:

Saya akhirnya menemukan pengaturan yang benar-benar membatasi jumlah koneksi:net.ipv4.netfilter.ip_conntrack_max . Ini disetel ke 11.776 dan apa pun yang saya setel adalah jumlah permintaan yang dapat saya layani dalam pengujian saya sebelum harus menunggu tcp_fin_timeout detik agar lebih banyak sambungan tersedia. conntrack table adalah yang digunakan kernel untuk melacak status koneksi sehingga setelah penuh, kernel mulai menjatuhkan paket dan mencetaknya di log:

Jun  2 20:39:14 XXXX-XXX kernel: ip_conntrack: table full, dropping packet.

Langkah selanjutnya adalah membuat kernel mendaur ulang semua koneksi tersebut di TIME_WAIT negara daripada menjatuhkan paket. Saya bisa mewujudkannya dengan mengaktifkan tcp_tw_recycle atau meningkatkan ip_conntrack_max menjadi lebih besar dari jumlah port lokal yang disediakan untuk koneksi oleh ip_local_port_range . Saya kira begitu kernel keluar dari port lokal, ia mulai mendaur ulang koneksi. Ini menggunakan lebih banyak koneksi pelacakan memori tetapi sepertinya solusi yang lebih baik daripada mengaktifkan tcp_tw_recycle karena dokumen menyiratkan bahwa itu berbahaya.

Dengan konfigurasi ini saya dapat menjalankan ab sepanjang hari dan tidak pernah kehabisan koneksi:

net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768    61000

tcp_max_orphans pengaturan tidak berpengaruh pada pengujian saya dan saya tidak tahu mengapa. Saya akan berpikir itu akan menutup koneksi di TIME_WAIT nyatakan sekali ada 8192 dari mereka tetapi tidak melakukan itu untuk saya.

Solusi 2:

Anda benar-benar ingin melihat apa yang ditawarkan sistem file /proc kepada Anda dalam hal ini.

  • Panduan Penyetelan TCP di Departemen Energi AS
  • Parameter Penyetelan TCP untuk berbagai OS:es
  • "Mengelola Linux dengan cepat" dari IBM
  • Dokumentasi di LinuxInsight.com vis-a-vis /proc/sys/net/ipv4

Di halaman terakhir tersebut, Anda mungkin menemukan hal berikut yang menarik bagi Anda:

  • /proc/sys/net/ipv4/tcp_max_orphans, yang mengontrol jumlah maksimum soket yang dipegang oleh sistem tidak melekat pada sesuatu. Meningkatkan ini dapat menghabiskan sebanyak 64kbyte memori yang tidak dapat ditukar per soket anak yatim .
  • /proc/sys/net/ipv4/tcp_orphan_retries, yang mengontrol jumlah percobaan ulang sebelum soket ditinggalkan dan ditutup. Ada catatan khusus di laman itu tentang server web yang menarik minat Anda secara langsung...

Solusi 3:

Saya tidak berpikir ada merdu untuk mengaturnya secara langsung. Ini termasuk dalam kategori penyetelan TCP/IP. Untuk mengetahui apa yang dapat Anda setel, coba 'man 7 tcp'. Sysctl ( 'man 8 sysctl' ) digunakan untuk mengatur ini. 'sysctl -a | grep tcp' akan menunjukkan kepada Anda sebagian besar dari apa yang dapat Anda sesuaikan, tetapi saya tidak yakin apakah itu akan menampilkan semuanya. Selain itu, kecuali ini telah berubah, soket TCP/IP terbuka seperti deskriptor file. Jadi bagian ini dan selanjutnya di tautan itu mungkin yang Anda cari.

Solusi 4:

Coba atur yang berikut ini juga atur tcp_fin_timeout. Ini akan menutup TIME_WAIT lebih cepat.

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

Solusi 5:

Stock apache(1) biasanya sudah ditentukan sebelumnya untuk hanya mendukung 250 koneksi bersamaan - jika Anda menginginkan lebih, ada satu file header untuk dimodifikasi untuk memungkinkan lebih banyak sesi bersamaan. Saya tidak tahu apakah ini masih berlaku dengan Apache 2.

Selain itu, Anda perlu menambahkan opsi untuk mengizinkan lebih banyak deskriptor file terbuka untuk akun yang menjalankan Apache - sesuatu yang gagal ditunjukkan oleh komentar sebelumnya.

Perhatikan pengaturan pekerja Anda dan jenis waktu tunggu keepalive yang Anda miliki di dalam Apache itu sendiri, berapa banyak server cadangan yang Anda jalankan sekaligus, dan seberapa cepat proses tambahan ini dimatikan.


Linux
  1. Apa yang Membuat Server Linux Kernel Mendasar?

  2. Apa tujuan dari file .bashrc di Linux?

  3. Berapa ukuran maksimum nilai variabel lingkungan Linux?

  1. Apa peran Magic Number dalam memuat boot di Linux?

  2. Apa batasan maksimal file yang dibuka di Linux?

  3. Apa yang setara dengan Active Directory di Linux

  1. Apa yang membuat Linux menjadi OS yang berkelanjutan

  2. Apa yang membuat komunitas Linux istimewa?

  3. Berapa nomor port maksimum?