Mes applications hébergées sur Amazon Elastic Container Service (Amazon ECS) subissent des délais de réponse lents.
Résolution
Identifier les raisons de la lenteur des délais de réponse
Consultez les événements de service Amazon ECS pour déterminer les raisons de l'arrêt des tâches.
Contraintes liées aux ressources
L'un des messages d'erreur suivants peut s'afficher dans les journaux d'application :
- Problèmes liés au processeur : Pénurie de threads, saut d’horloge ou délais d'exécution
- Problèmes de mémoire : OutOfMemoryError ou Limite de surcharge GC dépassée
Lorsque l'application rencontre un problème lié aux ressources, le conteneur peut s'arrêter. Les opérations en cours sont ignorées avant d'être terminées. Les données sont perdues et les réponses aux requêtes échouent.
Pour résoudre les problèmes liés aux contraintes de ressource, procédez comme suit :
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, sélectionnez Définitions de tâche.
- Sélectionnez Créer une nouvelle définition de tâche.
- Dans la section Détails du conteneur, définissez les ressources pour votre charge de travail.
Remarque : pour plus d'informations, consultez la section Que dois-je savoir sur l'allocation de processeur dans Amazon ECS ?
- Choisissez les types d'instances de conteneur Amazon Elastic Compute Cloud (Amazon EC2) pour allouer les ressources.
- Optimisez les délais de lancement de vos tâches.
Pour plus d'informations sur l'utilisation du processeur et de la mémoire, consultez la section Utilisation du processeur et de la mémoire de niveau service.
Problèmes d'I/O et de réseau
L'un des messages d'erreur suivants peut s’afficher en raison d'erreurs de connexion ou de délais d'attente :
- Délais de connexion et nouvelles tentatives : SocketTimeoutException : expiration du délai de connexion
- Échecs de résolution DNS : Impossible de résoudre l'hôte : api.example.com
- Erreurs de réseau inaccessible : Le réseau est inaccessible (Hôte : 'database.example.com'. Port : (5432)
- Erreurs de refus de connexion : java.net.ConnectException : Connexion refusée (Connexion refusée)
- Erreurs SSL/TLS : Échec de l’établissement d’une liaison avec l’alerte SSL routines:SSL23_GET_SERVER_HELLO:sslv3
Pour résoudre vos problèmes d'I/O et de réseau, procédez comme suit :
Erreurs de base de données
Pour les problèmes liés à la base de données, l'un des messages d'erreur suivants peut s'afficher dans vos journaux d’application :
- Épuisement du groupe de connexions : java.sql.SQLException : Trop de connexions
- Délais d'attente de requête : ERREUR : annulation de l’instruction en raison du délai d'expiration de l’instruction
- Blocages : Blocage détecté lors de la tentative de verrouillage ; essayez de redémarrer la transaction
- Problèmes de connexion : *Impossible de se connecter au serveur MySQL sur '\ ' (111)
Pour résoudre les problèmes de base de données, optimisez les requêtes de base de données, puis recréez votre index.
Surveillez les métriques et les surveillances de l’état de l'équilibreur de charge
Utilisez Amazon CloudWatch pour surveiller les métriques sur les équilibreurs de charge et les cibles.
Examiner les réponses d’application
Il est possible que vous receviez l'un des codes de statut 5xx suivants :
- HTTP 500 (Erreur de serveur interne)
- HTTP 502 (Passerelle incorrecte)
- HTTP 504 (Délai d'expiration de la passerelle)
Pour résoudre ces problèmes, consultez la section Erreurs courantes.
Consultez les journaux d’application pour rechercher d’éventuels messages d'erreur
Utilisez CloudWatch pour consulter vos journaux Amazon ECS afin de détecter d'éventuelles erreurs telles que Délai d’expiration de la connexion, La requête de base de données a dépassé la limite de temps ou Limite de mémoire dépassée. Pour identifier les erreurs et analyser les blocages et les délais de réponse, utilisez les données de suivi d’application.
Optimisez les performances
Utilisez les méthodes suivantes pour améliorer les performances de vos applications hébergées Amazon ECS.
Mettez vos données en cache
Utilisez un système de mise en cache pour transférer rapidement vos données. Parmi les exemples de systèmes de mise en cache que vous pouvez utiliser, citons Redis, Memcached ou Amazon CloudFront.
Si vous utilisez le type de lancement EC2, configurez ECS_IMAGE_PULL_BEHAVIOR: prefer-cached comme comportement d'extraction de l'agent de conteneur Amazon ECS. Pour plus d'informations, consultez la section Optimiser l'heure de lancement des tâches Amazon ECS.
Utilisez Application Auto Scaling
Utilisez Application Auto Scaling pour modifier le nombre de tâches en fonction de la demande. Puis, configurez les politiques de mise à l’échelle.
Pour plus d'informations, consultez la section Qu'est-ce qu'Amazon EC2 Auto Scaling ?
Optimisez les images de conteneur
Utilisez des générations en plusieurs étapes pour réduire la taille de l'image et mettez en cache vos couches d'image. Pour plus d'informations, consultez la section Conteneurs Linux sur le comportement d'extraction d'images de conteneur Fargate pour Amazon ECS.
Mettez en œuvre des journaux et des moniteurs efficaces
Utilisez l'API LogConfiguration pour définir les niveaux de journalisation, puis utilisez AWS X-Ray pour implémenter le traçage distribué.
Informations connexes
Messages d’événement de service Amazon ECS
Métriques CloudWatch pour votre Application Load Balancer
Journaux de conteneur centralisés avec Amazon ECS et Amazon CloudWatch Logs
Comment puis-je configurer l’autoscaling du service Amazon ECS sur Fargate ?