Будет ли увеличение net.core.somaxconn иметь значение?

27

Я получил аргумент по параметру net.core.somaxconn: мне сказали, что это не будет иметь никакого значения, если мы изменим значение по умолчанию 128.

Я полагал, что это может быть достаточным доказательством:

«Если аргумент backlog больше значения в / proc / sys / net / core / somaxconn, то он молча усекается до этого значения» http://linux.die.net/man/2/listen

но это не так.

Кто-нибудь знает способ засвидетельствовать это на двух машинах, сидящих в сети Gbit? Лучше всего будет против MySQL, LVS, apache2 (2.2), memcached.

petermolnar
источник

Ответы:

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_overflow1.

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

Если вы хотите получить более подробную информацию обо всех внутренних компонентах бэклога в Linux, не стесняйтесь читать: Как работает бэклог TCP в Linux .

SaveTheRbtz
источник
1
Также стоит отметить: начиная с Linux 5.4 он был увеличен до 4096 .
Привет-ангел