Comment résoudre le problème lié au message d'erreur « Commande OOM non autorisée lorsque la mémoire est utilisée > 'maxmemory' » pour un nœud de cluster Amazon ElastiCache Redis ?

Dernière mise à jour : 08/06/2020

Les clients reçoivent l’erreur « Commande OOM non autorisée lorsque la mémoire utilisée > 'maxmemory' » lors de l'interrogation de mon nœud de cluster Amazon ElastiCache for Redis. Que signifie cette erreur et comment l'éliminer ?

Brève description

Une erreur OOM se produit lorsqu'un cluster ElastiCache for Redis ne peut pas libérer de mémoire supplémentaire.

ElastiCache for Redis implémente la maxmemory-policy qui est définie pour le nœud de cache du groupe de paramètres lorsqu'il ne dispose plus de mémoire. La valeur par défaut (volatile-lru) libère de la mémoire en expulsant les clés ayant un délai d’expiration (valeur TTL). Lorsqu'un nœud de cache n'a pas de clés ayant une valeur de durée de vie (TTL, time-to-live), il renvoie une erreur.

Pour résoudre cette erreur et empêcher les clients de recevoir les messages d'erreur Commande OOM non autorisée, effectuez une combinaison des opérations suivantes :

  • Définissez une valeur TTL pour les clés sur votre nœud.
  • Mettez à jour le groupe de paramètres pour utiliser un paramètre maxmemory-policy différent.
  • Supprimez des clés existantes manuellement pour libérer de la mémoire.
  • Choisissez un type de nœud plus grand.

Remarque : La combinaison exacte des résolutions que vous utilisez dépend de votre cas d'utilisation particulier.

Résolution

Définir une valeur de durée de vie (TTL) pour les clés sur votre nœud

Vous pouvez définir une valeur TTL pour les clés sur votre nœud. La stratégie par défaut de gestion de la mémoire volatile-lru expulse alors les clés expirées pour libérer de la mémoire.

Si vous définissez une valeur TTL, vous pouvez également utiliser le paramètre volatile-ttl. Ce paramètre récupère de l'espace en expulsant uniquement les clés ayant un délai d’expiration défini, en commençant par les clés ayant la TTL la plus basse.

Choisir un paramètre maxmemory-policy différent

Affectez à maxmemory-policy l'une des valeurs suivantes pour un groupe de paramètres de nœud de cache :

  • allkeys lru : récupère de l'espace en expulsant d'abord les clés les moins utilisées récemment.
  • allkeys-random : récupère de l'espace en expulsant les clés aléatoires.
  • volatile-random : récupère de l'espace en expulsant les clés aléatoires ayant une expiration définie.

De plus, Redis 4.0 offre des modes d'expulsion de clés les moins utilisées (LFU, Least Frequently Used) :

  • allkeys-lfu : récupère de l'espace en expulsant la clé ayant fait l'objet du plus petit nombre d'accès.
  • volatils-lfu : récupère de l'espace en expulsant les clés ayant une expiration définie, en commençant par celle ayant fait l'objet du plus petit nombre d'accès.

Supprimer des clés existantes pour libérer de la mémoire

Vous pouvez supprimer des clés existantes afin de libérer de la mémoire à l'aide de la commande SUPPR. Pour plus d'informations, consultez Suppr clé [clé...] sur le site web redis.io.

Important : La suppression de clés existantes élimine les erreurs OOM uniquement temporairement. Veillez à également reconsidérer votre stratégie de gestion de la mémoire.

Choisir un type de nœud plus grand

Chaque type de nœud a une quantité différente de mémoire disponible. Vous ne pouvez pas modifier la quantité de mémoire disponible sur un nœud. Cependant, vous pouvez utiliser un type de nœud plus grand avec une plus grande quantité de mémoire.

Important : l'utilisation d'un type de nœud plus grand élimine les erreurs OOM uniquement de façon temporaire. Veillez à également revoir votre stratégie de gestion de la mémoire.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?