Проблема со стресс-тестом сервера Winsock IOCP

У меня есть сервер winsock IOCP, написанный на С++ с использованием соединений TCP IP. Я протестировал этот сервер локально, используя петлевой адрес с симулятором клиента. Мне удалось получить более 60 000 клиентов без труда. Проблема, с которой я сталкиваюсь, заключается в том, что я запускаю сервер у себя дома, а симулятор клиента в доме друзей. Все работает нормально до тех пор, пока мы не достигнем около 3700 подключений, после чего каждый вызов connect() завершается с ошибкой со стороны клиента с возвратом 10060 (это ошибка времени ожидания winsock). Прошлой ночью это число было 3700, но раньше было около 300, и мы также видели его около 1000. Но каким бы ни было число, каждый раз, когда мы пытаемся смоделировать его, оно будет терпеть неудачу примерно в пределах этого числа (в пределах 10 или около того). .

Оба компьютера используют Windows 7 Ultimate. Мы также изменили параметр реестра TCPIP MaxTcpConnections примерно до 16 миллионов. Мы также изменили настройку MaxUserPort с 5000 по умолчанию на 65k. Никакая полезная информация не отображается в средстве просмотра событий. Мы также оба наблюдали за нашим монитором ресурсов, и мы даже не достигли 1% использования сети, загрузка ЦП также близка к 0%.

Мы только что разговаривали по телефону с нашим интернет-провайдером, и они говорят, что никоим образом не ограничивают нас, но парень был немного не уверен и в итоге все равно повесил трубку после 30-минутного ожидания ...

Мы пытаемся сделать все, чтобы разобраться в этом вопросе, но не можем придумать решение. Я был бы очень признателен, если бы кто-то там мог помочь нам с этой проблемой.

P.S. Оба компьютера находятся на Verizon FIOS с таким же маршрутизатором Verizon. Следует также отметить, что сервер использует WSAAccept, а НЕ AcceptEx. Симулятор клиента пытается подключиться в течение многих секунд, поэтому я почти уверен, что подключения не задерживаются. Мы попытались изменить скорость, с которой подключается клиентский симулятор, и независимо от того, какую скорость он установил, он каждый раз терпит неудачу примерно с одним и тем же числом.

ОБНОВЛЕНИЕ Мы смоделировали 2 отдельных клиента (на 2 отдельных машинах) в сети A. Сервер работал в сети B. Каждый клиент смог подключить только половину (около 1600) подключений к серверу. Первоначально мы использовали порт ниже 1000, теперь он был изменен на более 50000. Журнал маршрутизатора на обеих машинах ничего не показал. Мы оба используем маршрутизатор FIOS verizon Actiontec MI424WR. Это наводит меня на мысль, что проблема не в клиентском коде. Сервер не выдает ошибок и не имеет неожиданного поведения. Может ли это быть проблемой провайдера/маршрутизатора?

UPDATE Решение найдено. Маршрутизатор Verizon, который мы использовали (MI424WR версии C), не может обрабатывать более 3700 подключений, мы протестировали его с отдельным набором сетей. Спасибо за помощь, ребята!

Спасибо - Рик


person Rick    schedule 30.08.2011    source источник
comment
Попробуйте использовать анализатор пакетов (например, wireshark), чтобы определить проблему.   -  person Hasturkun    schedule 31.08.2011
comment
Я скачаю его и попробую, я не использовал его раньше, поэтому я не уверен, что именно искать. Показывает ли он вам ошибки, которые происходят, или мне просто нужно изучить пакеты низкого уровня и определить для себя, что происходит?   -  person Rick    schedule 31.08.2011


Ответы (1)


Я бы предположил, что это проблема MaxUserPort, но вы сказали, что изменили это. Вы перезагружались после смены?

Запустите тест на тех же самых компьютерах в вашей локальной сети (это исключит компьютеры из уравнения).

Проблема может заключаться в том, что один из ваших маршрутизаторов не справляется с работой?

person Len Holgate    schedule 31.08.2011
comment
Спасибо за ответ. Да, мы оба перезагрузились и занимались этой проблемой в течение последних нескольких дней. Я еще не запускал тест по локальной сети, я посмотрю, смогу ли я это сделать, и сообщу вам, что произойдет. - person Rick; 31.08.2011
comment
Кроме того, что именно может сделать маршрутизатор, чтобы этот код не работал (где он не работает?) - person Rick; 31.08.2011
comment
Я был бы удивлен, если бы это был маршрутизатор, но, возможно, если это дешевый домашний маршрутизатор, он не в состоянии справиться с таким количеством одновременных подключений... - person Len Holgate; 31.08.2011
comment
Вы можете попробовать использовать мой тестовый инструмент, ссылка на который приведена здесь: serverframework.com/asynchronousevents/2010/10/ это займет ваш клиентский код вне уравнения. - person Len Holgate; 31.08.2011
comment
Спасибо, это звучит здорово. Я скачаю его, когда вернусь домой, и посмотрю, смогу ли я прийти к каким-либо выводам. Я читал ваш сайт раньше, и вы, кажется, довольно хорошо разбираетесь в крупномасштабных сетях. Поэтому я должен спросить, есть ли какие-либо другие ключи реестра, которые вам нужно изменить для ваших систем, используете ли вы серверную версию Windows? Поддерживали ли вы большую клиентскую базу с помощью Windows 7? - person Rick; 31.08.2011
comment
MaxUserPort — это единственная необходимая настройка, и то только для машин, на которых вы собираетесь создавать множество клиентских подключений. - person Len Holgate; 01.09.2011