Что я не добавил в своем вопросе, так это то, что мое приложение является контейнером, как и MongoDB на моей машине.
Я запускал приложение в режиме отладки вне контекста контейнера в Visual Studio. Это означает, что он не мог видеть контейнерную сеть и поэтому не мог подключиться.
Есть предел, да. См. ulimit
.
Также необходимо учитывать состояние TIMED_WAIT
. Когда сокет TCP закрыт (по умолчанию), порт остается занятым в состоянии TIMED_WAIT
в течение 2 минут. Это значение настраивается. Это также «выгонит вас из сокетов», даже если они закрыты.
Запустите netstat
, чтобы увидеть действие TIMED_WAIT
.
PS Причина ] TIMED_WAIT
предназначен для обработки пакетов, поступающих после закрытия сокета. Это может произойти, потому что пакеты задерживаются или другая сторона просто не знает, что сокет еще не закрыт. Это позволяет ОС молча отбрасывать эти пакеты без шанса «заразить» другой,
При поиске максимальной производительности вы сталкиваетесь с большим количеством проблем и потенциальных узких мест. Выполнение простого теста hello world не обязательно найдет их всех.
Возможные ограничения включают:
/ proc / sys / net
множество настроек ядра .. ulimit
, как другие заявили здесь top
, чтобы увидеть, не превышает ли ваш процессор Является ли ваш сервер однопоточным? Если да, то какую функцию опроса / мультиплексирования вы используете?
Использование select () не работает за пределами жестко заданного максимального предела дескриптора файла, установленного во время компиляции, что безнадежно (обычно 256 или несколько больше).
poll () лучше, но вы столкнетесь с проблемой масштабируемости с большим количеством FD, повторно заполняющих набор каждый раз во время цикла.
epoll () должна хорошо работать до некоторого другого предела, который вы достигнете.
Соединения 10k должны быть достаточно простыми для достижения. Используйте недавнее (ish) ядро 2.6.
Сколько клиентских машин вы использовали? Вы уверены, что не достигли лимита на стороне клиента?
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