Pourquoi est-ce que je constate une utilisation élevée ou croissante du processeur dans mon cluster ElastiCache for Redis ?

Lecture de 5 minute(s)
0

Je constate une utilisation élevée ou croissante du processeur dans mon cluster Amazon ElastiCache for Redis. Comment puis-je résoudre ce problème ?

Brève description

Il existe deux métriques de processeur Amazon CloudWatch pour ElastiCache for Redis :

  • EngineCPUUtilization : cette métrique indique l'utilisation du CPU du thread de moteur Redis. Comme Redis est à thread unique, il est recommandé de surveiller la métrique EngineCPUUtilization pour les nœuds de quatre vCPU ou plus.
  • CPUUtilization : cette métrique indique le pourcentage d'utilisation du CPU pour l'ensemble de l'hôte. Pour les nœuds plus petits avec deux vCPU ou moins, utilisez la métrique CPUUtilization afin de surveiller la charge de travail du cluster.

Solution

Métrique EngineCPUUtlilization élevée

Les raisons courantes suivantes expliquent les métriques EngineCPUUtilization élevées :

  • Une commande de longue durée qui consomme beaucoup de temps processeur : les commandes à haute complexité temporelle, telles que keys, hkeys, hgetall, etc., consomment plus de temps processeur. Pour des suggestions de performances et de complexité en temps pour chaque commande, veuillez consulter la page Commandes sur le site web redis.io (Langue Français non garanti). Les scripts Lua (exécutés par les commandes Redis EVAL ou EVALSHA) constituent une opération atomique dans Redis. Toutes les activités du serveur sont bloquées pendant toute la durée d'exécution d'un script Lua, ce qui entraîne une métrique EngineCPUUtilization élevée. Vérifiez s'il existe des commandes ou un script Lua de longue durée à l'aide du journal Redis Slow.
  • Un nombre élevé de demandes : vérifiez les statistiques des commandes afin de déterminer s'il existe des rafales de commandes ou si la latence augmente. Vous pouvez vérifier les statistiques des commandes à l'aide de métriques CloudWatch telles que GetTypeCmds ou HashBasedCmds. Vous pouvez également utiliser la commande Redis info commandstats. Si vous constatez un nombre élevé de demandes en raison de la charge de travail attendue sur l'application, envisagez de mettre à l'échelle le cluster.
  • Sauvegarde et réplication : vérifiez la métrique SaveInProgress afin de déterminer si une sauvegarde ou une réplication est en cours. Cette métrique binaire renvoie « 1 » lorsqu'une sauvegarde en arrière-plan (avec ou sans bifurcation) est en cours. La métrique renvoie « 0 » si aucun enregistrement en arrière-plan n'est en cours. Assurez-vous de disposer de suffisamment de mémoire pour créer un instantané Redis.
  • Nombre élevé de nouvelles connexions : l'établissement d'une connexion TCP est une opération coûteuse en termes de calcul, en particulier pour les clusters compatibles TLS. Un nombre élevé de nouvelles demandes de connexion client sur une courte période peut entraîner une augmentation de la métrique EngineCPUUtilization. Depuis Redis 6.2, des améliorations de performances sont désormais disponibles pour les clusters compatibles TLS utilisant des types de nœuds x86 de huit vCPU (ou plus) sur des types de nœuds Graviton2 de quatre vCPU (ou plus). Pour obtenir des recommandations sur la gestion d'un nombre de connexions élevé, veuillez consulter la section Bonnes pratiques : clients Redis et Amazon ElastiCache for Redis (Langue Français non garanti).
  • Nombre élevé d'expulsions : Redis expulse les clés conformément au paramètre maxmemory-policy. L'expulsion se produit lorsque le cache ne dispose pas de suffisamment de mémoire pour contenir de nouvelles données. Si le volume d'expulsion est élevé, la métrique EngineCPUUtilization augmente car Redis est occupé à expulser les clés. Le volume des expulsions peut être surveillé à l'aide des métriques CloudWatch Evictions. Si le taux d'expulsion est élevé, augmentez la taille de votre cluster en utilisant un type de nœud plus important, ou montez en puissance en ajoutant des nœuds supplémentaires.
  • Nombre élevé de récupérations : pour libérer de la mémoire, Redis analyse puis supprime toutes les clés qui ont dépassé leur délai d'expiration. Ce processus est appelé « récupération ». Si le nombre d'expirations est élevé, la métrique EngineCPUUtilization augmente car Redis est occupé à récupérer les clés. Vous pouvez surveiller le nombre d'événements d'expiration de clé à l'aide des métriques CloudWatch Reclaimed. Il est recommandé de ne pas faire expirer trop de clés en même temps en exécutant, par exemple, la commande Redis EXPIREAT.

Pour plus d'informations sur la résolution des problèmes liés à la métrique EngineCPUUtilization, veuillez consulter la section Résolution de problèmes liés aux connexions : utilisation du CPU (Langue Français non garanti).

Métrique CPUUtilization élevée

Les raisons courantes suivantes expliquent les métriques CPUUtilization élevées :


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans