Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie zeitweilige Verbindungsfehler und zugehörige Leistungsprobleme in Azure App Service beheben. Dieses Thema enthält weitere Informationen zu sowie Problembehandlungsmethoden für die Auslastung von SNAT-Ports (Source Network Address Translation). Wenn Sie an einem beliebigen Punkt in diesem Artikel weitere Hilfe benötigen, wenden Sie sich an die Azure-Experten beim Azure Community-Support. Alternativ dazu haben Sie die Möglichkeit, einen Azure-Supportfall zu erstellen. Wechseln Sie zum Azure-Support , und wählen Sie "Supportticket übermitteln" aus.
Symptome
Anwendungen und Funktionen, die im Azure App-Dienst gehostet werden, können ein oder mehrere der folgenden Probleme aufweisen:
- Langsame Reaktionszeiten bei allen oder einigen der Instanzen in einem Dienstplan.
- Sporadische 5xx- oder Bad Gateway-Fehler.
- Meldungen zur Timeoutfehlern
- Es konnte keine Verbindung mit externen Endpunkten hergestellt werden (z. B. SQLDB, Service Fabric oder andere App-Dienste).
Ursache
Die Hauptursache für zeitweilig auftretende Verbindungsprobleme ist das Erreichen einer Grenze, während neue ausgehende Verbindungen hergestellt werden. Folgende Grenzwerte können erreicht werden:
- TCP-Verbindungen: Es gibt einen Grenzwert für die Anzahl ausgehender Verbindungen, die hergestellt werden können. Der Grenzwert für ausgehende Verbindungen ist der Größe des verwendeten Workers zugeordnet.
- SNAT-Ports: Verwenden von SNAT für ausgehende Verbindungen beschreibt SNAT-Port-Einschränkungen und deren Auswirkung auf ausgehende Verbindungen. Azure verwendet die Quell-Netzwerkadressenübersetzung (Source Network Address Translation, SNAT) und Load Balancer (nicht für Kunden verfügbar gemacht), um mit öffentlichen IP-Adressen zu kommunizieren. Jeder Instanz im Azure-App-Dienst wird zunächst eine vorab zugeordnete Anzahl von 128 SNAT-Ports zugewiesen. Dieses SNAT-Port-Limit wirkt sich auf das Öffnen von Verbindungen mit derselben Adress- und Portkombination aus. Wenn Ihre App Verbindungen mit einer Mischung aus Adress- und Portkombinationen herstellt, werden Sie Ihre SNAT-Ports nicht aufbrauchen. Die SNAT-Ports werden aufgebraucht, wenn Sie wiederholten Aufrufe an dieselbe Kombination aus Adresse und Port vornehmen. Sobald ein Port freigegeben wurde, steht der Port nach Bedarf zur Wiederverwendung zur Verfügung. Der Azure Network Load Balancer gibt SNAT-Ports von geschlossenen Verbindungen erst nach einer Wartezeit von vier Minuten frei.
Wenn Anwendungen oder Funktionen schnell eine neue Verbindung öffnen, können sie ihr vorverteiltes Kontingent von 128 Ports schnell ausschöpfen. Sie werden dann blockiert, bis ein neuer SNAT-Port verfügbar wird, entweder durch dynamisches Zuweisen weiterer SNAT-Ports oder durch Wiederverwendung eines freigegebenen SNAT-Ports. Wenn Ihre App nicht mehr über SNAT-Ports verfügt, treten zeitweise probleme mit ausgehender Verbindung auf.
Vermeiden des Problems
Es gibt einige Lösungen, mit denen Sie SNAT-Port-Einschränkungen vermeiden können. Dazu gehören:
- Verbindungspools: Durch das Pooling Ihrer Verbindungen vermeiden Sie das Öffnen neuer Netzwerkverbindungen für Anrufe an die gleiche Adresse und denselben Port.
- Dienstendpunkte: Sie verfügen nicht über eine SNAT-Porteinschränkung für Dienste, die mit Dienstendpunkten gesichert sind.
- Private Endpunkte: Sie verfügen nicht über eine SNAT-Porteinschränkung für Dienste, die mit privaten Endpunkten gesichert sind.
- NAT Gateway: Mit einem NAT Gateway verfügen Sie über 64 KB ausgehende SNAT-Ports, die von den Ressourcen genutzt werden können, die Datenverkehr darüber senden.
Um das SNAT-Port-Problem zu vermeiden, verhindern Sie, dass immer wieder neue Verbindungen zum selben Host und Port aufgebaut werden. Verbindungspools zählen zu den offensichtlicheren Möglichkeiten, dieses Problem zu lösen.
Wenn Es sich bei Ihrem Ziel um einen Azure-Dienst handelt, der Dienstendpunkte unterstützt, können Sie SNAT-Portausschöpfungsprobleme vermeiden, indem Sie regionale Integration von virtuellen Netzwerken und Dienstendpunkte oder private Endpunkte verwenden. Wenn Sie die regionale Integration des virtuellen Netzwerks verwenden und Dienstendpunkte im Integrationssubnetz platzieren, gelten für Ihre App ausgehender Datenverkehr zu diesen Diensten keine Einschränkungen des ausgehenden SNAT-Ports. Ebenso treten keine Probleme bei ausgehenden SNAT-Ports an dieses Ziel auf, wenn Sie die regionale VNet-Integration und private Endpunkte verwenden.
Wenn Ihr Ziel ein externer Endpunkt außerhalb von Azure ist, erhalten Sie mithilfe eines NAT Gateways 64 KB ausgehende SNAT-Ports. Außerdem erhalten Sie eine dedizierte ausgehende Adresse, die Sie mit niemandem teilen.
Wenn möglich, verbessern Sie Ihren Code für die Verwendung von Verbindungspools, und vermeiden Sie die gesamte Situation. Es ist nicht immer möglich, Code schnell genug zu ändern, um diese Situation zu entschärfen. Wenn Sie den Code nicht rechtzeitig ändern können, nutzen Sie die anderen Lösungen. Die beste Lösung des Problems ist die bestmögliche Kombination aller Lösungen. Versuchen Sie, Dienstendpunkte und private Endpunkte für Azure-Dienste zu verwenden und das NAT Gateway für den Rest.
Weitere Informationen zu Strategien zur Reduzierung der SNAT-Portausschöpfung finden Sie unter Verwenden von SNAT für ausgehende Verbindungen. Von diesen Strategien sind die folgenden anwendbar auf Apps und Funktionen, die im Azure-App-Dienst gehostet werden.
Verbindungspooling verwenden
- Lesen Sie zum Pooling von HTTP-Verbindungen Poolen von HTTP-Verbindungen mit HttpClientFactory.
- Informationen zum SQL Server-Verbindungspooling finden Sie unter SQL Server-Verbindungspooling (ADO.NET).
In den folgenden Artikeln wird die Implementierung des Verbindungspools durch verschiedene Lösungsstapel beschrieben.
Knoten
Standardmäßig werden Verbindungen für Node.js nicht aufrechterhalten.
HTTP-Keep-Alive
Java
Verbindungspooling bei Java Database Connectivity (JDBC)
HTTP-Verbindungspooling
PHP
Von PHP wird Verbindungspooling zwar nicht unterstützt, aber Sie können versuchen, dauerhafte Datenbankverbindungen auf Ihrem Back-End-Server zu verwenden.
MySQL-Server
- MySQLi-Verbindungen für neuere Versionen
- mysql_pconnect für ältere Versionen von PHP
Weitere Datenquellen
Python
HTTP-Verbindungspooling
- Keep-Alive- und HTTP-Verbindungspooling sind standardmäßig im Modul Anforderungen aktiviert.
- Urllib3
Wiederverwenden von Verbindungen
Weitere Zeiger und Beispiele zum Verwalten von Verbindungen in Azure-Funktionen finden Sie unter Verwalten von Verbindungen in Azure-Funktionen.
Verwenden Sie weniger aggressive Wiederholungslogik
Weitere Anleitungen und Beispiele finden Sie unter "Wiederholungsmuster".
Verwenden von Keep-Alives zum Zurücksetzen des Leerlauftimeouts bei ausgehenden Verbindungen
Informationen zum Implementieren von Keepalives für Node.js-Apps finden Sie unter Meine Node-Anwendung tätigt übermäßig ausgehende Anrufe.
Weitere Anleitungen für App Service
- Ein Auslastungstest sollte reale Daten mit einer konstanten Zuführungsgeschwindigkeit simulieren. Das Testen von Apps und Funktionen unter realen Stress kann SNAT-Portausschöpfungsprobleme im Voraus erkennen und beheben.
- Stellen Sie sicher, dass die Back-End-Dienste Antworten schnell zurückgeben können. Informationen zum Behandeln von Problemen mit der Azure SQL-Datenbank finden Sie unter Behandeln von Problemen mit der Leistung von Azure SQL-Datenbank mithilfe von Intelligent Insights.
- Erweitern Sie den App Service-Plan auf weitere Instanzen. Weitere Informationen zur Skalierung finden Sie unter Skalieren einer App in Azure App Service. Jeder Workerinstanz in einem App Service-Plan wird eine Anzahl von SNAT-Ports zugeordnet. Wenn Sie Ihre Nutzung auf mehrere Instanzen verteilen, können Sie eventuell eine SNAT-Portnutzung pro Instanz unterhalb des empfohlenen Limits von 100 ausgehenden Verbindungen pro eindeutigem Remoteendpunkt erreichen.
- Erwägen Sie die Umstellung auf App Service-Umgebung (ASE), wobei Ihnen eine einzelne ausgehende IP-Adresse zugewiesen wird und die Grenzwerte für Verbindungen und SNAT-Ports höher sind. In einer ASE basiert die Anzahl der SNAT-Ports pro Instanz auf der Azure Load Balancer-Vorabzuordnungstabelle. Beispielsweise verfügt ein ASE mit 1-50 Worker-Instanzen über 1.024 vorzugewiesene Ports pro Instanz, während ein ASE mit 51-100 Worker-Instanzen 512 vorzugewiesene Ports pro Instanz aufweist.
Die Vermeidung der ausgehenden TCP-Limits lässt sich leichter erreichen, weil die Limits durch die Größe Ihres Workers festgelegt werden. Sie finden die Limits in Numerische Limits für sandboxübergreifende VM: TCP-Verbindungen.
| Limitname | BESCHREIBUNG | Klein (A1) | Mittel (A2) | Groß (A3) | Dienstebene „Isoliert“ (ASE) |
|---|---|---|---|---|---|
| Verbindungen | Anzahl von Verbindungen in der gesamten VM | 1920 | 3968 | 8064 | 16.000 |
Um ausgehende TCP-Limits zu vermeiden, können Sie entweder die Größe Ihres Workers erhöhen oder horizontal erweitern.
Hilfe zur Problembehandlung
Die Kenntnis der beiden Arten von Limits für ausgehende Verbindungen sowie des Verhaltens Ihrer App sollte die Problembehandlung erleichtern. Wenn Sie wissen, dass Ihre App viele Aufrufe an dasselbe Speicherkonto durchführt, könnten Sie ein SNAT-Limit vermuten. Wenn Ihre App eine große Anzahl von Aufrufen von Endpunkten über das Internet erstellt, würden Sie vermuten, dass Sie das Limit des virtuellen Computers erreichen.
Wenn Sie das Anwendungsverhalten nicht gut genug kennen, um die Ursache schnell zu ermitteln, gibt es einige Tools und Methoden, die in App Service zur Unterstützung dieser Ermittlungsaufgabe verfügbar sind.
Auffinden von SNAT-Portzuordnungsinformationen
Sie können die App Service-Diagnose verwenden, um SNAT-Portzuordnungsinformationen zu suchen, und die Zuordnungsmetrik von SNAT-Ports für eine App Service-Site beobachten. Gehen Sie wie folgt vor, um SNAT-Portzuordnungsinformationen zu finden:
- Navigieren Sie für den Zugriff auf die App Service-Diagnose zu Ihrer App Service-Web-App oder App Service-Umgebung im Azure-Portal. Wählen Sie im Randleistenmenü " Diagnostizieren" aus, und lösen Sie Probleme.
- Wählen Sie "Verfügbarkeit" und "Leistung" aus .
- Wählen Sie in der Liste der verfügbaren Kacheln unter der Kategorie die Kachel „SNAT-Portauslastung“ aus. Die Vorgehensweise besteht darin, den Wert unter 128 zu halten. Wenn Sie dies benötigen, können Sie immer noch ein Supportticket öffnen, und der Supporttechniker ruft die Metrik vom Back-End für Sie ab.
Da die SNAT-Portnutzung nicht als Metrik verfügbar ist, ist es nicht möglich, entweder die automatische Skalierung basierend auf der SNAT-Portverwendung oder die Automatische Skalierung basierend auf der SNAT-Portzuordnungsmetrik zu konfigurieren.
TCP-Verbindungen und SNAT-Ports
TCP-Verbindungen und SNAT-Ports stehen in keinem direkten Zusammenhang. Ein TCP-Verbindungsnutzungsdetektor ist auf der Verwaltungsseite "Diagnose" und "Lösung von Problemen " einer app Service-App enthalten. Suchen Sie nach dem Ausdruck TCP-Verbindungen , um ihn zu finden.
- Die SNAT-Ports werden nur für externe Netzwerkflüsse verwendet, während die gesamten TCP-Verbindungen lokale Loopbackverbindungen enthalten.
- Ein SNAT-Port kann von verschiedenen Flows gemeinsam genutzt werden, wenn sich die Flows im Protokoll, bei der IP-Adresse oder dem Port unterscheiden. Die TCP-Verbindungenmetrik zählt jede TCP-Verbindung.
- Das Limit für TCP-Verbindungen gilt auf Workerinstanzebene. Der ausgehende Lastenausgleich im Azure-Netzwerk verwendet die TCP-Verbindungenmetrik nicht für die SNAT-Portbegrenzung.
- Die TCP-Verbindungsgrenzwerte sind in Sandbox Cross VM Numerische Grenzwerte - TCP-Verbindungen beschrieben.
- Vorhandene TCP-Sitzungen schlagen fehl, wenn neue ausgehende TCP-Sitzungen vom Quellport in Azure App Service hinzugefügt werden. Sie können entweder eine einzelne IP-Adresse verwenden oder Back-End-Poolmitglieder neu konfigurieren, um Konflikte zu vermeiden.
| Limitname | BESCHREIBUNG | Klein (A1) | Mittel (A2) | Groß (A3) | Dienstebene „Isoliert“ (ASE) |
|---|---|---|---|---|---|
| Verbindungen | Anzahl von Verbindungen in der gesamten VM | 1920 | 3968 | 8064 | 16.000 |
WebJobs und Datenbankverbindungen
Wenn die SNAT-Ports erschöpft sind und WebJobs keine Verbindung mit der SQL-Datenbank herstellen kann, gibt es keine Metrik, die zeigt, wie viele Verbindungen von jedem einzelnen Webanwendungsprozess geöffnet werden. Um den problematischen WebJob zu finden, verschieben Sie mehrere WebJobs in einen anderen App Service-Plan, um festzustellen, ob sich die Situation verbessert, oder ob ein Problem in einem der Pläne bestehen bleibt. Wiederholen Sie den Vorgang, bis Sie den problematischen WebJob gefunden haben.