Delen via


Problemen met onregelmatige uitgaande verbindingen in Azure App Service oplossen

Dit artikel helpt u bij het oplossen van onregelmatige verbindingsfouten en gerelateerde prestatieproblemen in Azure-app Service. Het biedt meer informatie over en probleemoplossingsmethoden voor SNAT-poorten (Source Network Address Translation). Als u op enig moment in dit artikel meer hulp nodig hebt, neemt u contact op met de Azure-experts op de MSDN Azure en de Stack Overflow-forums. U kunt ook een ondersteuning voor Azure incident indienen. Ga naar de Azure-ondersteuningssite en selecteer Ondersteuning krijgen.

Symptomen

Toepassingen en functies die worden gehost op Azure-app service kunnen een of meer van de volgende symptomen vertonen:

  • Trage reactietijden voor alle of sommige exemplaren in een serviceplan.
  • Onregelmatige fouten met 5xx of ongeldige gateway
  • Foutberichten over time-outs
  • Kan geen verbinding maken met externe eindpunten (zoals SQLDB, Service Fabric, andere App-services, enzovoort)

Oorzaak

De belangrijkste oorzaak voor onregelmatige verbindingsproblemen is het bereiken van een limiet tijdens het maken van nieuwe uitgaande verbindingen. De limieten die u kunt bereiken, zijn:

  • TCP-Verbinding maken ions: er is een limiet voor het aantal uitgaande verbindingen dat kan worden gemaakt. De limiet voor uitgaande verbindingen is gekoppeld aan de grootte van de gebruikte werkrol.
  • SNAT-poorten: uitgaande verbindingen in Azure beschrijft SNAT-poortbeperkingen en hoe deze van invloed zijn op uitgaande verbindingen. Azure maakt gebruik van SNAT (Source Network Address Translation) en load balancers (niet beschikbaar voor klanten) om te communiceren met openbare IP-adressen. Elk exemplaar van Azure-app service krijgt in eerste instantie een vooraf toegewezen aantal 128 SNAT-poorten. De SNAT-poortlimiet is van invloed op het openen van verbindingen met dezelfde adres- en poortcombinatie. Als uw app verbindingen maakt met een combinatie van adres- en poortcombinaties, gebruikt u uw SNAT-poorten niet. De SNAT-poorten worden gebruikt wanneer u herhaalde aanroepen naar dezelfde adres- en poortcombinatie hebt. Zodra een poort is vrijgegeven, kan de poort indien nodig opnieuw worden gebruikt. De Azure Network-load balancer claimt de SNAT-poort van gesloten verbindingen pas opnieuw na 4 minuten wachten.

Wanneer toepassingen of functies snel een nieuwe verbinding openen, kunnen ze snel hun vooraf toegewezen quotum van de 128 poorten gebruiken. Ze worden vervolgens geblokkeerd totdat een nieuwe SNAT-poort beschikbaar is, hetzij door dynamisch meer SNAT-poorten toe te wijzen of door een gereveerde SNAT-poort opnieuw te gebruiken. Als uw app geen SNAT-poorten meer heeft, heeft deze onregelmatige uitgaande connectiviteitsproblemen.

Het probleem vermijden

Er zijn enkele oplossingen waarmee u SNAT-poortbeperkingen kunt voorkomen. Deze omvatten:

  • verbindingsgroepen: Door uw verbindingen te groeperen, vermijdt u het openen van nieuwe netwerkverbindingen voor aanroepen naar hetzelfde adres en dezelfde poort.
  • service-eindpunten: U hebt geen SNAT-poortbeperking voor de services die zijn beveiligd met service-eindpunten.
  • privé-eindpunten: U hebt geen SNAT-poortbeperking voor services die zijn beveiligd met privé-eindpunten.
  • NAT-gateway: Met een NAT-gateway hebt u 64k uitgaande SNAT-poorten die kunnen worden gebruikt door de resources die er verkeer doorheen verzenden.

Om het probleem met de SNAT-poort te voorkomen, voorkomt u dat er herhaaldelijk nieuwe verbindingen met dezelfde host en poort worden gemaakt. Verbinding maken ionpools zijn een van de meer voor de hand liggende manieren om dat probleem op te lossen.

Als uw bestemming een Azure-service is die service-eindpunten ondersteunt, kunt u problemen met SNAT-poortuitputting voorkomen door regionale VNet-integratie en service-eindpunten of privé-eindpunten te gebruiken. Wanneer u regionale VNet-integratie gebruikt en service-eindpunten op het integratiesubnet plaatst, heeft uw app uitgaand verkeer naar deze services geen uitgaande SNAT-poortbeperkingen. Als u regionale VNet-integratie en privé-eindpunten gebruikt, hebt u geen problemen met uitgaande SNAT-poorten voor die bestemming.

Als uw bestemming een extern eindpunt buiten Azure is, beschikt u met behulp van een NAT-gateway over 64k uitgaande SNAT-poorten. Het geeft u ook een speciaal uitgaand adres dat u niet met iemand deelt.

Verbeter indien mogelijk uw code om verbindingsgroepen te gebruiken en vermijd de hele situatie. Het is niet altijd mogelijk om code snel genoeg te wijzigen om deze situatie te verhelpen. Voor gevallen waarin u uw code niet op tijd kunt wijzigen, profiteert u van de andere oplossingen. De beste oplossing voor het probleem is om alle oplossingen zo goed mogelijk te combineren. Probeer service-eindpunten en privé-eindpunten te gebruiken voor Azure-services en de NAT-gateway voor de rest.

Algemene strategieën voor het beperken van SNAT-poortuitputting worden besproken in de sectie Probleemoplossing van de uitgaande verbindingen van Azure-documentatie . Van deze strategieën zijn de volgende van toepassing op apps en functies die worden gehost op Azure-app service.

Pas de toepassing zo aan dat deze verbindingsgroepen gebruikt

Hier volgt een verzameling koppelingen voor het implementeren van Verbinding maken ionpooling door verschillende oplossingsstacks.

Knooppunt

Standaard worden verbindingen voor NodeJS niet actief gehouden. Hieronder vindt u de populaire databases en pakketten voor groepsgewijze verbindingen, inclusief voorbeelden van de implementatie ervan.

HTTP-keepalive

Java

Hieronder ziet u de populaire bibliotheken die worden gebruikt voor JDBC-verbindingspooling, die voorbeelden bevatten voor het implementeren ervan: JDBC-Verbinding maken ionpooling.

Groepsgewijze HTTP-verbinding

PHP

Hoewel PHP geen ondersteuning biedt voor groepsgewijze verbindingen, kunt u proberen permanente databaseverbindingen met uw back-endserver te gebruiken.

Python

Hieronder ziet u de populaire databases en modules voor verbindingspooling die voorbeelden bevatten voor het implementeren ervan.

Groepsgewijze HTTP-verbinding

Pas de toepassing aan om verbindingen opnieuw te gebruiken

Pas de toepassing zo aan dat deze minder agressieve logica voor opnieuw proberen gebruikt

  • Raadpleeg het patroon Opnieuw proberen voor meer richtlijnen en voorbeelden.

Keep-alives gebruiken om de time-out voor uitgaande inactiviteit opnieuw in te stellen

Meer richtlijnen die specifiek zijn voor App Service:

  • Een belastingstest moet echte wereldgegevens simuleren in een constante voersnelheid. Het testen van apps en functies onder stress in de praktijk kan problemen met SNAT-poortuitputting van tevoren identificeren en oplossen.
  • Zorg ervoor dat de back-endservices snel antwoorden kunnen retourneren. Raadpleeg prestatieproblemen met Azure SQL Database oplossen met Intelligent Insights voor het oplossen van prestatieproblemen met Azure SQL Database.
  • Schaal het App Service-plan uit naar meer exemplaren. Zie Een app schalen in Azure-app Service voor meer informatie over schalen. Aan elk werkrolexemplaren in een App Service-plan wordt een aantal SNAT-poorten toegewezen. Als u uw gebruik verspreidt over meer exemplaren, krijgt u mogelijk het SNAT-poortgebruik per exemplaar onder de aanbevolen limiet van 100 uitgaande verbindingen per uniek extern eindpunt.
  • Overweeg om over te stappen naar App Service Environment (ASE), waarbij u één uitgaand IP-adres hebt toegewezen en de limieten voor verbindingen en SNAT-poorten hoger zijn. In een ASE is het aantal SNAT-poorten per exemplaar gebaseerd op de vooraf inbezettingstabel van Azure Load Balancer. Een AS-omgeving met 1-50 werkrolexemplaren heeft bijvoorbeeld 1024 vooraf toegewezen poorten per exemplaar, terwijl een AS-omgeving met 51-100 werkrollen 512 vooraf toegewezen poorten per exemplaar heeft.

Het vermijden van de uitgaande TCP-limieten is eenvoudiger op te lossen, omdat de limieten worden ingesteld door de grootte van uw werkrol. U kunt de limieten zien in numerieke limieten voor sandbox-VM's - TCP-Verbinding maken ions

Naam beperken Beschrijving Klein (A1) Middelgroot (A2) Groot (A3) Geïsoleerde laag (ASE)
Connecties Aantal verbindingen in de hele VIRTUELE machine 1920 3968 8064 16.000

Als u uitgaande TCP-limieten wilt voorkomen, kunt u de grootte van uw werkrollen vergroten of horizontaal uitschalen.

Probleemoplossing

Als u de twee typen uitgaande verbindingslimieten kent en wat uw app doet, kunt u dit eenvoudiger oplossen. Als u weet dat uw app veel aanroepen naar hetzelfde opslagaccount doet, vermoedt u mogelijk een SNAT-limiet. Als uw app veel aanroepen naar eindpunten via internet maakt, vermoedt u dat u de VM-limiet bereikt.

Als u het gedrag van de toepassing niet voldoende weet om de oorzaak snel te bepalen, zijn er enkele hulpprogramma's en technieken beschikbaar in App Service om u te helpen bij die bepaling.

Informatie over SNAT-poorttoewijzing zoeken

U kunt App Service Diagnostics gebruiken om informatie over de toewijzing van SNAT-poorten te vinden en de metrische gegevens over de toewijzing van SNAT-poorten van een App Service-site te observeren. Volg de volgende stappen om informatie over SNAT-poorttoewijzing te vinden:

  1. Als u toegang wilt krijgen tot Diagnostische gegevens van App Service, gaat u naar uw App Service-web-app of App Service-omgeving in Azure Portal. Selecteer in het linkernavigatievenster Diagnose en los problemen op.
  2. Beschikbaarheids- en prestatiecategorie selecteren
  3. Selecteer de tegel SNAT-poortuitputting in de lijst met beschikbare tegels onder de categorie. De praktijk is om het onder de 128 te houden. Als u dit nodig hebt, kunt u nog steeds een ondersteuningsticket openen en krijgt de ondersteuningstechnicus de metrische gegevens van de back-end voor u.

Omdat SNAT-poortgebruik niet beschikbaar is als metrische waarde, is het niet mogelijk om automatisch schalen op basis van SNAT-poortgebruik of om automatisch schalen te configureren op basis van metrische gegevens voor SNAT-poortentoewijzing.

TCP-Verbinding maken ions en SNAT-poorten

TCP-verbindingen en SNAT-poorten zijn niet rechtstreeks gerelateerd. Een GEBRUIKsdetector voor TCP-verbindingen is opgenomen op de pagina Problemen oplossen en vaststellen van problemen met een App Service-app. Zoek de woordgroep TCP-verbindingen om deze te vinden.

  • De SNAT-poorten worden alleen gebruikt voor externe netwerkstromen, terwijl de totale TCP-Verbinding maken ies lokale loopback-verbindingen bevatten.
  • Een SNAT-poort kan worden gedeeld door verschillende stromen, als de stromen verschillen in protocol, IP-adres of poort. De metrische TCP-Verbinding maken ions tellen elke TCP-verbinding.
  • De limiet voor TCP-verbindingen vindt plaats op het niveau van het werkrolexemplaren. De uitgaande taakverdeling van Het Azure-netwerk maakt geen gebruik van de metrische TCP-Verbinding maken ions voor SNAT-poortbeperking.
  • De limieten voor TCP-verbindingen worden beschreven in numerieke limieten voor sandbox-VM's - TCP-Verbinding maken ions
  • Bestaande TCP-sessies mislukken wanneer nieuwe uitgaande TCP-sessies worden toegevoegd vanuit Azure-app bronpoort van de service. U kunt één IP-adres gebruiken of leden van de back-endpool opnieuw configureren om conflicten te voorkomen.
Naam beperken Beschrijving Klein (A1) Middelgroot (A2) Groot (A3) Geïsoleerde laag (ASE)
Connecties Aantal verbindingen in de hele VIRTUELE machine 1920 3968 8064 16.000

Webjobs en databaseverbindingen

Als SNAT-poorten zijn uitgeput en WebJobs geen verbinding kunnen maken met SQL Database, is er geen metrische waarde om aan te geven hoeveel verbindingen worden geopend door elk afzonderlijk webtoepassingsproces. Als u de problematische webtaak wilt vinden, verplaatst u verschillende webtaken naar een ander App Service-plan om te zien of de situatie verbetert of als er een probleem in een van de plannen blijft. Herhaal het proces totdat u de problematische webtaak hebt gevonden.

Aanvullende informatie