Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous aide à résoudre les erreurs de connexion intermittentes et les problèmes de performances liés dans Azure App Service. Cette rubrique fournit des informations supplémentaires et des méthodologies de dépannage concernant l’épuisement des ports SNAT. Si vous avez besoin d’aide supplémentaire à tout moment dans cet article, contactez les experts Azure au support communautaire Azure. Vous pouvez également signaler un incident au support Azure. Accédez au support Azure et sélectionnez Envoyer un ticket de support.
Symptômes
Les applications et fonctions hébergées sur Azure App Service peuvent présenter un ou plusieurs des problèmes suivants :
- Temps de réponse lent sur l’ensemble ou une partie des instances d’un plan de service.
- Erreurs intermittentes 5xx ou passerelle défectueuse.
- Messages d’erreur d’expiration du délai.
- Impossible de se connecter à des points de terminaison externes (comme SQLDB, Service Fabric ou d’autres services d’application).
La cause
En règle générale, des problèmes de connexion intermittents surviennent lorsqu’une limite a été atteinte en termes de nouvelles connexions sortantes. Les limites que vous pouvez atteindre sont les suivantes :
- Connexions TCP : il existe une limite quant au nombre de connexions sortantes qui peuvent être effectuées. La limite de connexions sortantes est associée à la taille du Worker utilisé.
- Ports SNAT : Les connexions sortantes dans Azure décrivent les restrictions de port SNAT et la manière dont elles affectent les connexions sortantes. Azure utilise la traduction d’adresses réseau sources (SNAT) et les équilibreurs de charge (non exposés aux clients) pour communiquer avec les adresses IP publiques. Chaque instance sur Azure App Service reçoit initialement un nombre préalloué de 128 ports SNAT. La limite de port SNAT affecte l’ouverture des connexions à la même combinaison adresse/port. Si votre application crée des connexions à une combinaison d’adresses et de ports, vous n’utiliserez pas vos ports SNAT. Les ports SNAT sont utilisés lorsque vous répétez des appels à la même combinaison adresse/port. Une fois qu’un port est libéré, le port est disponible pour la réutilisation si nécessaire. L’équilibreur de charge réseau Azure récupère les ports SNAT des connexions fermées uniquement après avoir attendu quatre minutes.
Lorsque les applications ou fonctions ouvrent rapidement une nouvelle connexion, elles peuvent rapidement épuiser leur quota préalloué de 128 ports. Elles sont ensuite bloquées jusqu’à ce qu’un nouveau port SNAT soit disponible, soit par le biais de l’allocation dynamique de ports SNAT supplémentaires, soit par la réutilisation d’un port SNAT récupéré. Si votre application n’a plus de ports SNAT, elle rencontre des problèmes de connectivité sortante intermittents.
Éviter le problème
Plusieurs solutions vous permettent d’éviter les limites de port SNAT. Ils comprennent :
- Pools de connexions : en mettant en pool vos connexions, vous évitez d’ouvrir de nouvelles connexions réseau pour les appels vers la même adresse et le même port.
- Points de terminaison de service : vous n’avez pas de restriction de port SNAT pour les services sécurisés avec des points de terminaison de service.
- Points de terminaison privés : vous n’avez pas de restriction de port SNAT pour les services sécurisés avec des points de terminaison privés.
- Passerelle NAT : Avec une passerelle NAT, vous disposez de 64 000 ports SNAT sortants utilisables par les ressources qui envoient du trafic via celle-ci.
Pour éviter le problème de port SNAT, évitez de créer de nouvelles connexions de façon répétée sur le même hôte et le même port. Les pools de connexions représentent l’une des méthodes les plus évidentes pour résoudre ce problème.
Si votre destination est un service Azure qui prend en charge les points de terminaison de service, vous pouvez éviter les problèmes d’épuisement des ports SNAT à l’aide de l’intégration de réseau virtuel régional et des points de terminaison de service ou de points de terminaison privés. Lorsque vous utilisez l’intégration de réseau virtuel régional et placez des points de terminaison de service sur le sous-réseau d’intégration, le trafic sortant de votre application vers ces services n’aura pas de restrictions de port SNAT sortantes. De même, si vous utilisez l’intégration de réseau virtuel régional et les points de terminaison privés, vous n’aurez aucun problème de port SNAT sortant vers cette destination.
Si votre destination correspond à un point de terminaison externe situé en dehors d’Azure, l’utilisation d’une passerelle NAT vous permet de disposer de 64 000 ports SNAT sortants. Elle met également à votre disposition une adresse sortante dédiée que vous ne partagez avec personne.
Si possible, améliorez votre code de manière à utiliser des pools de connexions et éviter tout problème. Il n’est pas toujours possible de modifier le code de manière assez rapide pour atténuer ce problème. Si vous ne pouvez pas modifier votre code dans les temps, optez pour les autres solutions. La meilleure solution à ce problème consiste à combiner au mieux toutes les solutions. Essayez d’utiliser des points de terminaison de service et des points de terminaison privés vers les services Azure et la passerelle NAT pour le reste.
Pour en savoir plus sur les stratégies d’atténuation de l’épuisement des ports SNAT, consultez Utiliser SNAT pour les connexions sortantes. Parmi ces stratégies, les éléments suivants s’appliquent aux applications et aux fonctions hébergées sur Azure App Service.
Utiliser le regroupement de connexions
- Pour le regroupement des connexions HTTP, passez en revue Connexions HTTP au pool avec HttpClientFactory.
- Pour plus d’informations sur le regroupement de connexions SQL Server, consultez Regroupement de connexions SQL Server (ADO.NET).
Les articles suivants décrivent l’implémentation du regroupement de connexions par une pile de solutions différente.
Nœud
Par défaut, les connexions pour Node.js ne sont pas maintenues actives.
Maintien en vie HTTP
Java
Regroupement de connexions JDBC (Java Database Connectivity)
Regroupement de connexions HTTP
PHP
Bien que PHP ne prenne pas en charge le regroupement de connexions, vous pouvez essayer d’utiliser des connexions de base de données persistantes à votre serveur back-end.
MySQL Server
- Connexions MySQLi pour les versions récentes
- mysql_pconnect pour les versions anciennes de PHP
Autres sources de données
Python
Regroupement de connexions HTTP
- Keep-alive et le regroupement de connexions HTTP sont activés par défaut dans le module Demandes .
- Urllib3
Réutiliser les connexions
Pour plus de pointeurs et d’exemples sur la gestion des connexions dans Azure Functions, consultez Gérer les connexions dans Azure Functions.
Utiliser une logique de nouvelle tentative moins agressive
Pour obtenir des conseils et des exemples supplémentaires, consultez le modèle Nouvelle tentative.
Utiliser des conservations de connexion active pour réinitialiser le délai d’inactivité en sortie
Pour implémenter des keepalives pour les applications Node.js, consultez Mon application de nœud effectue des appels sortants excessifs.
Conseils supplémentaires spécifiques à App Service
- Un test de charge doit simuler des données réelles dans une vitesse d’alimentation stable. Le test des applications et des fonctions sous contrainte réelle peut identifier et résoudre les problèmes d’épuisement des ports SNAT à l’avance.
- Vérifiez que les services back-end peuvent renvoyer des réponses rapidement. Pour résoudre les problèmes de performances liés à Azure SQL Database, consultez Résoudre les problèmes de performances liés à Azure SQL Database avec Intelligence Insights.
- Mettez à l’échelle le plan App Service avec plus d’instances. Pour plus d’informations sur la mise à l’échelle, consultez Mise à l’échelle des applications dans un environnement Azure App Service. Un certain nombre de ports SNAT sont alloués à chaque instance de Worker dans un plan App Service. Si vous répartissez votre utilisation sur davantage d’instances, vous pouvez vous retrouver avec une utilisation de ports SNAT par instance en dessous de la limite recommandée de 100 connexions sortantes par point de terminaison distant unique.
- Envisagez de passer à App Service Environment (ASE), où une seule adresse IP sortante vous est attribuée, et où les limites pour les connexions et les ports SNAT sont plus élevées. Dans un ASE, le nombre de ports SNAT par instance est basé sur la table de pré-allocation de l’équilibreur de charge Azure. Par exemple, un ASE avec 1 à 50 instances de travail a 1 024 ports préalloués par instance, tandis qu’un ASE avec 51 à 100 instances de travail a 512 ports préalloués par instance.
L’évitement des limites TCP sortantes est plus facile à résoudre, car les limites sont définies en fonction de la taille de votre worker. Vous pouvez voir les limites dans Limites numériques des machines virtuelles bac à sable - Connexions TCP
| Nom de la limite | Descriptif | Petite (A1) | Moyenne (A2) | Grande (A3) | Niveau isolé (ASE) |
|---|---|---|---|---|---|
| Connexions | Nombre de connexions sur l’ensemble de la machine virtuelle | 1920 | 3968 | 8064 | 16 000 |
Pour éviter les limites TCP sortantes, vous pouvez augmenter la taille de vos workers ou effectuer une montée en charge horizontale.
Aide à la résolution des problèmes
La connaissance des deux types de limites de connexions sortantes et de ce que fait votre application devrait faciliter le dépannage. Si vous savez que votre application effectue un grand nombre d’appels au même compte de stockage, vous pourriez soupçonner une limite de SNAT. Si votre application crée un grand nombre d’appels aux points de terminaison sur Internet, vous pensez que vous atteignez la limite de la machine virtuelle.
Si vous ne connaissez pas suffisamment le comportement de l’application pour déterminer la cause rapidement, il existe des outils et des techniques disponibles dans App Service pour faciliter cette détermination.
Trouver les informations sur l’allocation de ports SNAT
Vous pouvez utiliser les Diagnostics App Service pour rechercher des informations sur l’allocation des ports SNAT et observer la métrique d’allocation de ports SNAT d’un site App Service. Pour rechercher des informations sur l’allocation de ports SNAT, procédez comme suit :
- Pour accéder aux diagnostics App Service, accédez à votre application App Service ou à votre environnement App Service dans le Portail Azure. Dans le menu de la barre latérale, sélectionnez Diagnostiquer et résoudre les problèmes.
- Sélectionnez La catégorie Disponibilité et performances .
- Sélectionnez la vignette d’épuisement des ports SNAT dans la liste des vignettes disponibles sous la catégorie. La pratique consiste à rester en dessous de 128. Si vous en avez besoin, vous pouvez toujours ouvrir un ticket de support, et l’ingénieur support technique obtiendra la métrique à partir du serveur principal pour vous.
Étant donné que l’utilisation du port SNAT n’est pas disponible en tant que métrique, il n’est pas possible de mettre à l’échelle automatiquement en fonction de l’utilisation du port SNAT ou de configurer la mise à l’échelle automatique en fonction de la métrique d’allocation des ports SNAT.
Connexions TCP et ports SNAT
Les connexions TCP et les ports SNAT ne sont pas directement liés. Un détecteur d’utilisation des connexions TCP est inclus dans la page Diagnostiquer et résoudre les problèmes de n’importe quelle application App Service. Recherchez l'expression connexions TCP pour la trouver.
- Les ports SNAT sont utilisés uniquement pour les flux de réseau externe, tandis que les connexions TCP totales incluent des connexions de bouclage locales.
- Un port SNAT peut être partagé par différents flux, si les flux sont différents en matière de protocole, d’adresse IP ou de port. La métrique Connexions TCP compte chaque connexion TCP.
- La limite de connexions TCP se produit au niveau de l’instance worker. L’équilibrage de charge sortant du réseau Azure n’utilise pas la métrique de connexions TCP pour la limitation des ports SNAT.
- Les limites des connexions TCP sont décrites dans Limites numériques des connexions TCP entre les machines virtuelles de type bac à sable.
- Les sessions TCP existantes échouent lorsque les nouvelles sessions TCP sortantes sont ajoutées du port source Azure App Service. Vous pouvez utiliser une seule IP ou reconfigurer les membres du pool de back-ends pour éviter les conflits.
| Nom de la limite | Descriptif | Petite (A1) | Moyenne (A2) | Grande (A3) | Niveau isolé (ASE) |
|---|---|---|---|---|---|
| Connexions | Nombre de connexions sur l’ensemble de la machine virtuelle | 1920 | 3968 | 8064 | 16 000 |
Connexions webjobs et bases de données
Si les ports SNAT sont épuisés, et que les WebJobs ne parviennent pas à se connecter à SQL Database, il n’existe aucune métrique pour afficher le nombre de connexions ouvertes par chaque processus d’application web individuel. Pour trouver les WebJobs problématiques, déplacez plusieurs WebJobs vers un autre plan App Service pour voir si la situation s’améliore ou si un problème persiste dans l’un des plans. Répétez le processus jusqu’à ce que vous trouviez le WebJob problématique.