Существует ли предел на количество tcp/ip соединений между машинами на Linux?

Что я не добавил в своем вопросе, так это то, что мое приложение является контейнером, как и MongoDB на моей машине.

Я запускал приложение в режиме отладки вне контекста контейнера в Visual Studio. Это означает, что он не мог видеть контейнерную сеть и поэтому не мог подключиться.

25
задан erotsppa 17 April 2009 в 15:13
поделиться

5 ответов

Есть предел, да. См. ulimit .

Также необходимо учитывать состояние TIMED_WAIT . Когда сокет TCP закрыт (по умолчанию), порт остается занятым в состоянии TIMED_WAIT в течение 2 минут. Это значение настраивается. Это также «выгонит вас из сокетов», даже если они закрыты.

Запустите netstat , чтобы увидеть действие TIMED_WAIT .

PS Причина ] TIMED_WAIT предназначен для обработки пакетов, поступающих после закрытия сокета. Это может произойти, потому что пакеты задерживаются или другая сторона просто не знает, что сокет еще не закрыт. Это позволяет ОС молча отбрасывать эти пакеты без шанса «заразить» другой,

27
ответ дан 28 November 2019 в 21:13
поделиться

При поиске максимальной производительности вы сталкиваетесь с большим количеством проблем и потенциальных узких мест. Выполнение простого теста hello world не обязательно найдет их всех.

Возможные ограничения включают:

  • Ограничения сокетов ядра: посмотрите в / proc / sys / net множество настроек ядра ..
  • пределы процесса: посмотрите ulimit , как другие заявили здесь
  • , поскольку ваше приложение усложняется, оно может не иметь достаточной мощности ЦП, чтобы не отставать от количества входящих подключений. Используйте top , чтобы увидеть, не превышает ли ваш процессор
  • количество потоков? У меня нет опыта работы с потоками, но это может вступить в игру в сочетании с предыдущими предметами.
8
ответ дан 28 November 2019 в 21:13
поделиться

Является ли ваш сервер однопоточным? Если да, то какую функцию опроса / мультиплексирования вы используете?

Использование select () не работает за пределами жестко заданного максимального предела дескриптора файла, установленного во время компиляции, что безнадежно (обычно 256 или несколько больше).

poll () лучше, но вы столкнетесь с проблемой масштабируемости с большим количеством FD, повторно заполняющих набор каждый раз во время цикла.

epoll () должна хорошо работать до некоторого другого предела, который вы достигнете.

Соединения 10k должны быть достаточно простыми для достижения. Используйте недавнее (ish) ядро ​​2.6.

Сколько клиентских машин вы использовали? Вы уверены, что не достигли лимита на стороне клиента?

2
ответ дан 28 November 2019 в 21:13
поделиться

Вы можете проверить /etc/security/limits.conf

1
ответ дан 28 November 2019 в 21:13
поделиться

Yep, the limit is set by the kernel; check out this thread on Stack Overflow for more details: Increasing the maximum number of tcp/ip connections in linux

1
ответ дан 28 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: