Установка 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_overflow1.
PPS. В старых версиях ядра Linux есть неприятная ошибка усечения somaxconзначения до 16 младших битов (т.е. приведения значения к uint16_t), поэтому повышение этого значения до большего, чем 65535может быть даже опасно. Для получения дополнительной информации см .: http://patchwork.ozlabs.org/patch/255460/
Если вы хотите получить более подробную информацию обо всех внутренних компонентах бэклога в Linux, не стесняйтесь читать:
Как работает бэклог TCP в Linux .