c # - Azur og lokalt antal TCP-forbindelser er meget forskellige

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger nu at læse data fra mange Azure-blokke parallelt med Azure Function og undlader at gøre det, fordi min serviceplan ikke tillader mere end ~4000 TCP-forbindelser (som jeg får en fejl i portalen om), men når jeg forsøger at køre det lokalt alle de følgende:



  • netstat med alle mulige flag

  • Wireshark

  • TCPView

  • netværksinspektør i Windows task manager



Vis blot et par snesevis af varer. Er der et værktøj eller måske kodestykke, som vil tillade mig at efterligne lokalt den situation, jeg har, når min app er implementeret?


Endnu bedre ville vide, om det på en eller anden måde er muligt at begrænse antallet af TCP-forbindelser, som min Azure-funktion forsøger at åbne (ved hjælp af .NET Azure SDK eller Azure-portalen eller nogle settings.json-filer eller hvad som helst)


Edit1 : Jeg har omskrevet hele sagen til at være sekventiel, og jeg har også splittet blob, læser i stykker af 100 elementer, det syntes noget at hjælpe med antallet af TCP-forbindelser (det ' s om 500 i top nu, så stadig meget, men i det mindste passer app serviceplanen, blev appen selvfølgelig langsommelig som helvede som et resultat), men det forsøger stadig at allokere ~4000]] af 'Socket handles' og mislykkes, kan stadig ikke finde en måde at se lokalt på samme antal sockethåndtag tildelt - Handles kolonne er Details fanen i Windows task manager viser omtrent det samme antal handles under hele processen udførelse

Bedste reference


At besvare spørgsmålet i sig selv: Jeg kunne ikke finde en måde at se de TCP-relaterede målinger, jeg får, når jeg rent faktisk kører mine funktioner i Azure. For øjeblikket føles det som om nogle vigtige udviklingsværktøjer og/eller docs mangler. Den 'serverløse' oplevelse viste sig at være det dybeste dykke i Windows-systemprogrammering, jeg nogensinde havde som .NET-udvikler.


Løsningen til selve problemet var følgende:
Jeg har omskrevet det hele til at være sekventiel og formået at få etableret omkring hundrede samtidige forbindelser. Så brugte jeg bare binær søgning med MaxDegreeOfParallelism, indtil jeg fandt en værdi, der passer til min plan. [8]

Andre referencer 1


Du kan måske støde på HTTP-standard implementeringen inden for HttpClient, som begrænser antallet af åbne forbindelser til 2 som standard. HTTP/1.1-specifikationen begrænser antallet af forbindelser fra en applikation til to forbindelser pr. Server. Du kan tilsidesætte denne standard ved hjælp af egenskaben DefaultConnectionLimit i ServicePointManager. Microsoft har en artikel om det her. [9] [10]