Akankah meningkatkan net.core.somaxconn membuat perbedaan?

27

Saya masuk ke argumen pada parameter net.core.somaxconn: Saya diberitahu bahwa itu tidak akan membuat perbedaan jika kita mengubah default 128.

Saya percaya ini mungkin cukup bukti:

"Jika argumen backlog lebih besar dari nilai di / proc / sys / net / core / somaxconn, maka diam-diam terpotong ke nilai itu" http://linux.die.net/man/2/listen

tapi ternyata tidak.

Apakah ada yang tahu metode untuk memberikan kesaksian ini dengan dua mesin, duduk di jaringan Gbit? Yang terbaik adalah melawan MySQL, LVS, apache2 (2.2), memcached.

petermolnar
sumber

Jawaban:

43

Pengaturan net.core.somaxconnke 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.somaxconnuntuk 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_overflowdi Linux).

listen(2)manual mengatakan - net.core.somaxconnhanya 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.somaxconnnilai apa pun, dan membatasi simpanan aplikasi misalnya 10dan ditetapkan net.ipv4.tcp_abort_on_overflowke 1.

PPS. Kernel Linux versi lama memiliki bug yang buruk dari somaxconnilai pemotongan sampai 16 bit yang lebih rendah (yaitu nilai casting ke uint16_t), sehingga menaikkan nilai itu menjadi lebih dari yang 65535bahkan 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 .

SaveTheRbtz
sumber
1
Juga patut dicatat: sejak Linux 5.4 ditingkatkan menjadi 4096 .
Hi-Angel