Встановлення 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 .