Azure и локальное количество TCP-соединений очень разные - PullRequest
0 голосов
/ 10 мая 2018

Я сейчас пытаюсь читать данные из большого числа больших двоичных объектов Azure параллельно, используя функцию Azure, и не могу этого сделать, потому что мой сервисный план не допускает более чем ~4000 TCP-подключений (что я получаю во), однако, когда я пытаюсь запустить его локально, все из следующего:

  • netstat со всеми возможными флагами
  • Wireshark
  • TCPView
  • сетевой инспектор в диспетчере задач Windows

просто покажите пару десятков элементов.Есть ли инструмент или, возможно, фрагмент кода, который позволит мне локально эмулировать ситуацию, которая возникает у меня после развертывания моего приложения?

Еще лучше знать, возможно ли каким-либо образом ограничить количество TCP-соединений, которые пытается открыть моя функция Azure (с помощью .NET Azure SDK, или портала Azure, или какого-либо файла settings.json, или чего-либо другого).)

Edit1 : я переписал все это, чтобы быть последовательным, а также я разбил чтение BLOB-объектов на куски 100 элементов, это, казалось, несколько помогло количеству TCPподключений (сейчас это около 500 на пике, так что все еще много, но, по крайней мере, в соответствии с планом обслуживания приложения, приложение, конечно, стало чертовски медленным), но оно все еще пытается выделить ~4000«Дескрипторы сокетов» и не удается, все еще не может найти способ локально увидеть то же количество выделенных дескрипторов сокетов - столбец Handles на вкладке Details диспетчера задач Windows показывает примерно одинаковое количество handles в течение всеговыполнение процесса

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Чтобы ответить на сам вопрос: я не смог найти способ локально увидеть метрики, связанные с TCP, которые я получаю, когда фактически выполняю свои функции в Azure.Сейчас кажется, что некоторые важные инструменты разработки и / или документы отсутствуют.Опыт «без сервера» оказался самым глубоким погружением в системное программирование Windows, которое я когда-либо имел в качестве разработчика .NET.

Решение самой проблемы было следующим: я переписал все это, чтобы быть последовательными ему удалось установить около ста одновременных соединений.Затем я просто использовал бинарный поиск, играя с MaxDegreeOfParallelism , пока не нашел значение, подходящее для моего плана.

0 голосов
/ 14 мая 2018

Возможно, вы столкнулись с реализацией стандарта HTTP в HttpClient, который ограничивает количество открытых соединений по умолчанию 2.Спецификация HTTP / 1.1 ограничивает количество соединений из приложения двумя соединениями на сервер.Вы можете переопределить это значение по умолчанию, используя свойство DefaultConnectionLimit в ServicePointManager. У Microsoft есть статья здесь .

...