Delen via


Onregelmatige uitgaande verbindingsfouten 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 bij de ondersteuning van de Azure-community. U kunt ook een Azure-ondersteuningsincident indienen. Ga naar De ondersteuning van Azure en selecteer Een ondersteuningsticket indienen.

Symptomen

Toepassingen en functies die worden gehost in Azure App Service kunnen een of meer van de volgende problemen vertonen:

  • Trage reactietijden voor alle of sommige exemplaren in een serviceplan.
  • Onregelmatige 5xx- of Bad Gateway-fouten.
  • Time-out foutmeldingen.
  • Kan geen verbinding maken met externe eindpunten (zoals SQLDB, Service Fabric of andere app-services).

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-verbindingen: 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, is de poort zo nodig beschikbaar voor hergebruik. De Load Balancer van Azure Network maakt SNAT-poorten pas vrij van gesloten verbindingen nadat u vier minuten hebt gewacht.

Wanneer toepassingen of functies snel een nieuwe verbinding openen, kunnen ze hun vooraf toegewezen quotum van 128 poorten snel uitputten. 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 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. Verbindingsgroepen 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 met behulp van regionale integratie van virtuele netwerken en service-eindpunten of privé-eindpunten. Wanneer u regionale integratie van virtuele netwerken gebruikt en service-eindpunten op het integratiesubnet plaatst, heeft uw app uitgaand verkeer naar deze services geen uitgaande SNAT-poortbeperkingen. Als u regionale integratie van virtuele netwerken 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.

Zie SNAT gebruiken voor uitgaande verbindingen voor meer informatie over strategieën voor het beperken van SNAT-poortuitputting. Van deze strategieën zijn de volgende van toepassing op apps en functies die worden gehost op Azure-app service.

Groepsgewijze verbinding gebruiken

In de volgende artikelen wordt beschreven hoe u groepsgewijze verbindingen implementeert door verschillende oplossingsstacks.

Knooppunt

Standaard worden verbindingen voor Node.js niet actief gehouden.

HTTP-keep-alive

Java

Java Database Connectivity (JDBC) verbindingspooling

HTTP-verbindingspooling

PHP

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

Python

HTTP-verbindingspooling

Verbindingen opnieuw gebruiken

Zie Verbindingen beheren in Azure Functions voor meer aanwijzers en voorbeelden over het beheren van verbindingen in Azure Functions.

Minder agressieve logica voor opnieuw proberen gebruiken

Zie voor meer richtlijnen en voorbeelden Opnieuw proberen-patroon.

Keepalives gebruiken om de time-out voor inactiviteit van uitgaande verbindingen opnieuw in te stellen

Zie Mijn knooppunttoepassing voor het implementeren van keepalives voor Node.js-apps overmatige uitgaande aanroepen.

Meer richtlijnen die specifiek zijn voor App Service

  • Een belastingstest moet echte gegevens simuleren in een constante voersnelheid. Het testen van apps en functies onder echte stress kan problemen met uitputting van SNAT-poorten 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 ASE met 1-50 werkrolexemplaren heeft bijvoorbeeld 1024 vooraf toegewezen poorten per exemplaar, terwijl een AS-omgeving met 51-100 werkrolexemplaren 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-verbindingen

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.

Hulp bij 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 limiet voor de virtuele machine 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 zijbalkmenu Diagnose en los problemen op.
  2. Selecteer de categorie Beschikbaarheid en Prestaties .
  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 metrisch gegeven, is het niet mogelijk om automatisch schalen op basis van SNAT-poortgebruik te configureren of om automatische schaalaanpassing te configureren op basis van metrische gegevens voor SNAT-poortentoewijzing.

TCP-verbindingen 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 zin TCP-verbindingen om deze te vinden.

  • De SNAT-poorten worden alleen gebruikt voor externe netwerkstromen, terwijl het totale aantal TCP-verbindingen lokale loopback-verbindingen bevat.
  • Een SNAT-poort kan worden gedeeld door verschillende stromen, als de stromen verschillen in protocol, IP-adres of poort. De metrische gegevens van TCP-verbindingen 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-verbindingen voor SNAT-poortbeperking.
  • De limieten voor TCP-verbindingen worden beschreven in numerieke limieten voor sandbox-VM's - TCP-verbindingen.
  • 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.