Je souhaite résoudre les problèmes liés aux temps de réponse et aux latences élevés dans le cadre de mes tâches Amazon Elastic Container Service (Amazon ECS).
Résolution
Vérifier vos indicateurs de niveau service Amazon ECS
Une utilisation accrue du processeur et de la mémoire peut entraîner des latences de réponse élevées pour vos tâches Amazon ECS. Utilisez les métriques Amazon CloudWatch pour visualiser l'utilisation du processeur et de la mémoire de niveau service. Si vous avez activé CloudWatch Container Insights, vérifiez l'utilisation du processeur et de la mémoire au niveau du conteneur. Si vous n'avez pas activé Container Insights, consultez la section Comment puis-je configurer CloudWatch Container Insights pour surveiller mes tâches Amazon ECS et mon instance de conteneur ?
Si les conteneurs de votre application doivent exécuter des charges de travail gourmandes en ressources processeur, passez à une taille de tâche plus importante qui inclut davantage de processeur virtuel (vCPU) et de mémoire. Vous pouvez également activer l’autoscaling d’applications.
Type de lancement des tâches Amazon ECS dans Amazon EC2
Vérifiez l'utilisation du processeur et de la mémoire par l'instance Amazon Elastic Cloud Compute (Amazon EC2) pour vos tâches Amazon ECS qui utilisent le type de lancement Amazon EC2.
Utilisez les métriques CloudWatch pour surveiller les performances réseau de votre instance Amazon EC2. Si la bande passante réseau de l'instance dépasse la bande passante de référence disponible, utilisez un type d'instance plus grand avec une bande passante de base élevée.
Utilisez la métrique CloudWatch CPUUtilization pour surveiller l'utilisation du processeur de l'instance. Aussi, connectez-vous à votre instance pour vérifier l'utilisation de la mémoire. Si l'utilisation du processeur ou de la mémoire est élevée, ajoutez d'autres instances au cluster pour répartir les tâches entre plusieurs instances. Vous pouvez également remplacer l'instance par un type d'instance plus grand.
Consultez les journaux d’application pour déterminer si la latence de réponse d'un service en aval est élevée. Il est recommandé d'activer AWS X-Ray pour résoudre les problèmes de latence.
Mesurer la latence de réponse
Si le service Amazon ECS se trouve derrière un Application Load Balancer, utilisez la métrique CloudWatch TargetResponseTime pour mesurer le temps de réponse. Cette métrique fournit le temps de réponse moyen pour les requêtes acheminées via l'Application Load Balancer. Si la valeur est élevée, des retards peuvent être observés dans l'application de backend ou l'infrastructure.
Pour mesurer la latence de réponse directement depuis le conteneur, connectez-vous au conteneur d'applications. Pour les tâches de type lancement d'Amazon EC2, exécutez la commande -it container id pour vous connecter au conteneur. Pour les tâches qui utilisent le type de lancement Fargate, utilisez ECS exec pour vous connecter au conteneur.
Puis, exécutez la commande suivante pour mesurer la latence de réponse :
curl -kso /dev/null -w "\n===============\n
| Connect: %{time_connect}\n
| App connect: %{time_appconnect}\n
| Pre-transfer: %{time_pretransfer}\n
| Time to First Byte (TTFB): %{time_starttransfer}\n
| Total: %{time_total}\n
| HTTP Code: %{http_code}\n===============\n" http://localhost:port/endpoint
Remarque : Remplacez le port par votre port de conteneur et endpoint par votre point de terminaison.
Dans la sortie de la commande précédente, le champ Temps de chargement du premier octet (TTFB) indique le temps nécessaire pour que le premier octet arrive. La sortie inclut également le temps de traitement du serveur. Si le temps de traitement est élevé, cela signifie que l'application met plus de temps à traiter la requête.
Informations connexes
Comment résoudre les problèmes liés à l'utilisation élevée du processeur lors d'une tâche Amazon ECS sur AWS Fargate ?
Comment puis-je surveiller l'utilisation élevée de la mémoire pour les tâches Amazon ECS sur Fargate ?
Comment puis-je calculer l'utilisation totale du réseau pour mes instances EC2 et déterminer quelle instance a utilisé le plus de bande passante au cours d'une période donnée ?