Pengaturan net.core.somaxconn
ke nilai yang lebih tinggi hanya diperlukan pada server dengan beban tinggi di mana tingkat koneksi baru sangat tinggi / bursty sehingga memiliki 128 (50% lebih banyak di BSD: 128 backlog
+ 64 half-open
) koneksi yang belum diterima dianggap normal. Atau ketika Anda perlu mendelegasikan definisi "normal" ke suatu aplikasi itu sendiri.
Beberapa administrator menggunakan tinggi net.core.somaxconn
untuk menyembunyikan masalah dengan layanan mereka, jadi dari sudut pandang pengguna proses itu akan terlihat seperti lonjakan latensi alih-alih koneksi terputus / batas waktu (dikontrol oleh net.ipv4.tcp_abort_on_overflow
di Linux).
listen(2)
manual mengatakan - net.core.somaxconn
hanya bertindak batas atas untuk aplikasi yang bebas memilih sesuatu yang lebih kecil (biasanya diatur dalam konfigurasi aplikasi). Meskipun beberapa aplikasi hanya menggunakan listen(fd, -1)
yang berarti mengatur backlog ke nilai maksimal yang diizinkan oleh sistem.
Penyebab sebenarnya adalah laju pemrosesan yang rendah (misalnya server pemblokiran berulir tunggal) atau jumlah thread / proses pekerja yang tidak mencukupi (mis. Perangkat lunak pemblokiran multi-proses / berulir seperti apache
/ tomcat
)
PS. Terkadang lebih baik gagal cepat dan membiarkan penyeimbang beban melakukan pekerjaannya (coba lagi) daripada membuat pengguna menunggu - untuk tujuan itu kami menetapkan net.core.somaxconn
nilai apa pun, dan membatasi simpanan aplikasi misalnya 10
dan ditetapkan net.ipv4.tcp_abort_on_overflow
ke 1.
PPS. Kernel Linux versi lama memiliki bug yang buruk dari somaxcon
nilai pemotongan sampai 16 bit yang lebih rendah (yaitu nilai casting ke uint16_t
), sehingga menaikkan nilai itu menjadi lebih dari yang 65535
bahkan bisa berbahaya. Untuk informasi lebih lanjut, lihat: http://patchwork.ozlabs.org/patch/255460/
Jika Anda ingin masuk ke detail lebih lanjut tentang semua internal backlog di Linux, jangan ragu untuk membaca:
Bagaimana TCP backlog bekerja di Linux .