Bonnes pratiques pour la gestion de la mémoire

Cette page explique la configuration de mémoire réservée pour votre instance Memcached et quand augmenter la mémoire réservée si nécessaire. Cette page présente également les autres bonnes pratiques à connaître pour gérer efficacement la mémoire de votre instance Memcached.

Memorystore ajoute à votre instance de la mémoire supplémentaire, qui ne vous est pas visible, afin de prendre en charge la surcharge créée par les processus Memcached. Cependant, suivant votre charge de travail spécifique, la surcharge de mémoire peut dépasser la quantité de mémoire supplémentaire provisionnée à cette fin.

Lorsque l'utilisation de la mémoire dépasse la mémoire système totale de Memorystore, une condition de mémoire saturée (OOM, Out Of Memory) peut entraîner un vidage complet du cache de données, ce qui peut perturber votre application et votre activité.

Les sections suivantes décrivent les principes généraux à suivre lors de la configuration d'une instance Memorystore pour Memcached. Ces sections couvrent également les métriques et les alertes que vous pouvez utiliser pour surveiller la mémoire, et expliquent les actions que vous pouvez entreprendre.

Concepts de gestion de la mémoire

Capacité de l'instance

La capacité de l'instance correspond à la quantité de mémoire que vous provisionnez, en Gio, et à ce qui vous est facturé. La mémoire cache n'est pas la même que la capacité de l'instance, car la mémoire cache n'est pas fixe. Cependant, lorsque vous créez votre instance Memcached, la capacité de l'instance est égale à la mémoire cache par défaut.

Par exemple, si vous choisissez une capacité d'instance de 5 Gio, votre instance dispose par défaut de 5 Gio d'espace dans lequel stocker les éléments.

Limite de mémoire cache

La mémoire cache est la taille totale de mémoire disponible pour une utilisation en tant que cache par votre instance Memcached. Par défaut, la mémoire cache est égale à la capacité de votre instance. Toutefois, l'ajustement de la mémoire réservée peut réduire la mémoire cache. Pour plus de détails, consultez la section Mémoire réservée. Une fois la mémoire cache saturée, Memcached commence à expulser les éléments stockés dans le cache afin de libérer de la place pour de nouvelles écritures.

Sachez que lorsque vous affichez la métrique de mémoire cache, la mémoire cache rapportée pour un nœud Memcached n'inclut que l'espace occupé par les éléments. Cela signifie que Memcached peut sous-estimer l'utilisation totale de la mémoire cache. De la mémoire supplémentaire peut être allouée par le cache en tant que fragmentation dans les dalles.

Surcharge de mémoire

La surcharge de mémoire correspond à la mémoire utilisée par les processus Memcached. Elle n'inclut pas les éléments stockés en mémoire pour la mise en cache.

La surcharge de mémoire s'adapte en fonction du nombre de connexions actives, du nombre total d'éléments et de la taille des éléments. En outre, la surcharge de mémoire est théoriquement illimitée. Elle peut donc évoluer à l'infini.

Pour tenir compte de la surcharge de mémoire, Memorystore ajoute de la mémoire supplémentaire à votre instance. Toutefois, la quantité de mémoire supplémentaire que nous ajoutons ne vous est pas visible. Pour la majorité des charges de travail, la surcharge de mémoire ne devrait pas poser problème.

En l'absence de configuration, la mémoire d'un nœud Memorystore pour Memcached vide ressemble au diagramme présenté ci-dessous.

espace réservé

Lorsque votre application ajoute des éléments au cache, Memcached accumule la surcharge pour des processus tels que les tampons de connexion et la table de hachage interne :

espace réservé

La croissance de la surcharge n'étant pas soumise à une limite, la surcharge de certaines charges de travail augmente au-delà de la limite réservée, comme indiqué ci-dessous :

espace réservé

Lorsque la surcharge et les éléments remplissent l'espace disponible, Memcached manque de mémoire et le processus doit être arrêté par l'OS, ce qui entraîne une purge complète du cache :

espace réservé

Vous remarquerez peut-être que la surcharge de mémoire dépasse l'espace supplémentaire alloué par Memorystore pour la surcharge par défaut (comme indiqué par une utilisation élevée de la mémoire système). Dans ce cas, augmentez le paramètre de mémoire réservée afin de générer une surcharge supplémentaire pour votre charge de travail.

Mémoire réservée

La mémoire réservée est une configuration Memorystore qui vous permet d'augmenter l'espace disponible à utilisé par la surcharge de mémoire.

Pour augmenter la mémoire disponible pour la surcharge de mémoire, augmentez la mémoire réservée, ce qui réduit la mémoire cache disponible. Ajoutez cet espace supplémentaire si votre instance subit une saturation de la mémoire due à une surcharge de mémoire élevée.

Le pourcentage de mémoire réservée par défaut des instances créées après le 25 octobre 2021 est de 10 %. Cette valeur peut être remplacée en mettant à jour manuellement la configuration de votre instance. Réduire la mémoire réservée sur votre instance peut considérablement augmenter les risques de conditions OOM.

Le schéma ci-dessous montre une instance qui a créé de l'espace supplémentaire pour la surcharge de mémoire en augmentant la mémoire réservée :

espace réservé

Une fois que le cache Memcached atteint cette limite réduite, il commence à expulser les éléments.

espace réservé

Une fois que vous commencez à utiliser l'instance, suivant de la métrique Utilisation de la mémoire système, vous devrez peut-être augmenter la mémoire réservée de votre instance pour répondre à votre charge de travail maximale.

Pour en savoir plus, consultez la page Gérer l'utilisation de la mémoire système.

Utilisation de la mémoire système

La mémoire système est égale à la capacité de votre instance provisionnée, plus l'espace supplémentaire ajouté par Memorystore pour la surcharge de mémoire.

L'utilisation de la mémoire système est une métrique qui indique le pourcentage de la mémoire utilisée (éléments stockés plus surcharge de mémoire) par rapport à la mémoire système. Il s'agit d'une métrique essentielle à surveiller, car elle vous indique si vous êtes sur le point de remplir complètement la mémoire système disponible pour votre instance. Plus la métrique d'utilisation de la mémoire système se rapproche de 100 %, plus l'instance est susceptible de rencontrer une condition OOM. Pour vous assurer que l'instance dispose de suffisamment de mémoire pour traiter votre charge de travail, il est important de toujours disposer de suffisamment de mémoire système.

Pour les charges de travail qui tentent de remplir intégralement le cache et qui s'appuient sur des évictions Memcached pour gérer les éléments stockés, vous pouvez vous attendre à voir l'utilisation de la mémoire système augmenter. Vous voudrez peut-être augmenter de manière préemptive la mémoire réservée afin de garantir que vous disposerez d'un espace suffisant pour la surcharge.

Alertes pour l'utilisation de la mémoire système

Vous devez définir une alerte pour vous avertir si la métrique "Utilisation de la mémoire système" dépasse 90 %. Si l'utilisation de la mémoire système est élevée, vous devez surveiller de plus près la métrique d'utilisation de la mémoire système. Si elle augmente de manière spectaculaire, vous devez envisager de prendre des mesures afin de gérer l'utilisation de la mémoire système. Il est important de prendre des mesures lorsque l'utilisation de la mémoire système atteint des niveaux élevés, car cela vous permet de limiter les risques au lieu de gérer un vidage de cache causé par une condition OOM.

Règles d'éviction

Memcached utilise un algorithme LRU optimisé pour expulser des éléments une fois qu'ils ont rempli la mémoire cache. Pour savoir comment désactiver les évictions de cache, consultez la page Configurer des instances Memcached.

La surveillance des évictions indique le nombre de clés Memcached supprimées en raison de limites de taille. Les éléments supprimés en raison de l'expiration de la valeur TTL ne sont pas inclus dans cette métrique. Si vous constatez un grand nombre d'évictions, le scaling à la hausse de votre instance peut entraîner une augmentation du taux d'accès au cache.

Si les évictions ne sont pas activées et que votre cache est complètement plein, la définition d'éléments sur votre serveur Memcached peut échouer.

Taux d'accès au cache

Vous devez surveiller régulièrement la métrique du taux d'accès au cache afin de savoir quel pourcentage de recherches de clés est renvoyé avec succès par les clés de votre instance Memcached. De manière générale, un taux d'accès au cache plus élevé est préférable à un taux d'accès au cache inférieur, car cela signifie que votre cache renvoie davantage de requêtes de cache.

Vous devez noter votre taux d'accès au cache avant d'apporter des modifications de configuration importantes, telles que l'ajustement de la mémoire réservée, l'ajustement des valeurs TTL clés ou le scaling de votre instance. Ensuite, après avoir modifié votre instance, vérifiez à nouveau le taux d'accès au cache pour voir l'impact de votre modification sur cette métrique.

Surveiller l'utilisation de la mémoire d'une instance

Les métriques suivantes vous donnent un aperçu de l'utilisation de la mémoire de votre instance. Pour savoir comment afficher des métriques et définir des alertes, consultez la page Surveiller des instances Memcached.

Métrique Adresse complète de la métrique
Mémoire cache memcache.googleapis.com/node/cache_memory
Utilisation de la mémoire système memcache.googleapis.com/node/memory/utilization
Taux d'accès au cache memcache.googleapis.com/node/hit_ratio
Évictions memcache.googleapis.com/node/eviction_count

Gérer l'utilisation de la mémoire système

Si votre instance rencontre une saturation de la mémoire ou des erreurs OOM, procédez comme suit pour résoudre le problème :

  1. Vérifiez une condition OOM.
  2. Augmentez la mémoire réservée sur votre instance.
  3. Effectuez un scaling à la hausse de l'instance.
  4. Définissez des valeurs TTL sur les clés volatiles.
  5. Supprimez manuellement des clés sur votre instance..
  6. Si vous rencontrez toujours des conditions OOM, contactez l'assistance Google Cloud Platform.

Vérifier une condition OOM

Lorsque votre instance atteint une condition OOM, le premier signal est un redémarrage de l'instance. Pour voir si un redémarrage est causé par une condition OOM, consultez les metrics de Disponibilité et d'Utilisation de la mémoire système.

Si l'utilisation de la mémoire système dépassait 90 % avant que la disponibilité ne devienne nulle, cela signifie que le redémarrage de l'instance a probablement été causé par une condition OOM.

Augmenter la mémoire réservée

Augmenter la mémoire réservée crée davantage d''espace pour la surcharge de mémoire. Cette opération procède en réduisant la limite de mémoire cache de l'instance. Vous devez augmenter la mémoire réservée si la métrique d'utilisation de la mémoire système dépasse 90 %.

Pour savoir comment ajuster la configuration de la mémoire réservée, consultez la section Configurer les instances Memcached.

Augmenter la mémoire réservée réduit la mémoire disponible pour stocker les éléments, ce qui entraîne une éviction plus rapide des éléments. Cela peut réduire le taux d'accès au cache de votre instance. Les éléments ne sont pas expulsés si vous avez désactivé les évictions.

Effectuer un scaling à la hausse de l'instance

Suivez les instructions de la section Mettre à l'échelle des instances Memcached pour augmenter le nombre de nœuds. Si votre application est configurée pour segmenter les clés entre les nœuds, cela augmente l'espace de stockage d'éléments global disponible pour votre application et réduit le nombre de clés stockées sur chaque nœud.

Définir des valeurs TTL sur les clés volatiles

Configurez votre application pour définir des valeurs TTL sur les clés stockées dans Memcached. Par défaut, Memcached recherche régulièrement les clés ayant expiré et les supprime, ce qui libère de l'espace sur votre serveur et empêche toute autre allocation de mémoire cache.

Supprimer manuellement des clés de votre instance

Pensez à supprimer des clés en cas de saturation de la mémoire. Cependant, étant donné que Memcached Open Source ne libère pas de mémoire précédemment allouée, la suppression de clés réduit simplement le risque de rencontrer une condition OOM. Cela réduit le risque, car les nouvelles écritures utilisent la mémoire vide. Une augmentation de la surcharge de mémoire peut toujours entraîner une condition OOM, car la mémoire précédemment allouée est dédiée au stockage d'éléments, et ne peut pas être utilisée pour la surcharge.