Чи зміниться net.core.somaxconn?


27

Я потрапив у аргумент щодо параметра net.core.somaxconn: мені сказали, що це не матиме жодних змін, якщо ми змінимо 128 за замовчуванням.

Я вважав, що це може бути достатнім доказом:

"Якщо аргумент відставання більше, ніж значення в / proc / sys / net / core / somaxconn, він мовчки прирізається до цього значення" http://linux.die.net/man/2/listen

але це не так.

Хтось знає спосіб засвідчити це двома машинами, сидячи в мережі Gbit? Найкраще було б проти MySQL, LVS, apache2 (2.2), запам'ятоване.

Відповіді:


43

Встановлення net.core.somaxconnбільш високих значень потрібне лише на високо завантажених серверах, де нова швидкість з'єднання настільки висока / розмита, що наявність 128 (50% більше в BSD: 128 backlog+ 64 half-open) ще не прийнятих з'єднань вважається нормальним. Або коли вам потрібно делегувати визначення "нормального" самій програмі.

Деякі адміністратори використовують високо, net.core.somaxconnщоб приховати проблеми зі своїми послугами, тому з точки зору користувача це буде виглядати як сплеск затримки замість того, щоб з'єднання було перервано / тайм-аут (контролюється net.ipv4.tcp_abort_on_overflowв Linux).

listen(2)Посібник говорить - net.core.somaxconnдіє лише верхня межа для програми, яка вільно вибирати щось менше (зазвичай встановлюється в конфігурації програми). Хоча деякі програми просто використовують, listen(fd, -1)що означає встановити відставання на максимальне значення, дозволене системою.

Справжньою причиною є або низька швидкість обробки (наприклад, єдиний сервер блокування потоків) або недостатня кількість робочих потоків / процесів (наприклад, багатопроцесорне / потокове блокування програмного забезпечення, як apache/ tomcat)

PS. Іноді бажано швидко вийти з ладу і дозволити навантажувачу виконати свою роботу (повторити), ніж змусити користувача чекати - для цього ми встановлюємо net.core.somaxconnбудь-яке значення, а обмеження відставання програми обмежуємо, наприклад, 10і встановлюємо net.ipv4.tcp_abort_on_overflowна 1.

PPS. У старих версіях ядра Linux є неприємна помилка обрізання somaxconзначення на 16 нижчих бітів (тобто значення для кастингу в uint16_t), тому підвищення цього значення до більшого, ніж 65535може бути навіть небезпечним. Для отримання додаткової інформації див: http://patchwork.ozlabs.org/patch/255460/

Якщо ви хочете детальніше ознайомитися з усіма внутрішніми блоками роботи в Linux, не соромтесь прочитати: Як працює затримка TCP в Linux .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.