Comment puis-je résoudre les problèmes liés à une forte sollicitation de la mémoire JVM dans un cluster Amazon Elasticsearch Service ?

Date de la dernière mise à jour : 14/04/2020

La mémoire JVM est fortement sollicitée dans mon cluster Amazon Elasticsearch Service (Amazon ES). À quoi se rapportent les différents niveaux de sollicitation de la mémoire JVM et comment puis-je les réduire ?

Résolution

Le niveau de sollicitation de la mémoire JVM se présente sous la forme de pourcentages applicables au tas Java dans un nœud de cluster. Les indications suivantes précisent la signification de ces pourcentages :

  • Si la sollicitation de la mémoire JVM atteint 75 %, Amazon ES déclenche le récupérateur de mémoire CMS (Concurrent Mark Sweep). Le processus de récupération de mémoire nécessite une utilisation intense du processeur. Si la sollicitation de la mémoire JVM reste à ce niveau pendant quelques minutes, vous pouvez rencontrer des problèmes de type ClusterBlockException ou JVM OutOfMemoryError, ou relatifs aux performances du cluster.
  • Si la sollicitation de la mémoire JVM dépasse 92 % pendant 30 minutes, Amazon ES bloque toutes les opérations d'écriture.
  • Si la sollicitation de la mémoire JVM atteint 100 %, la mémoire JVM d'Amazon ES est configurée pour s'arrêter et redémarre sur une exception OutOfMemory (OOM).

Une forte sollicitation de la mémoire JVM peut survenir pour les raisons suivantes :

  • Pics du nombre de demandes envoyées au cluster.
  • Regroupements, caractères génériques et sélection de grandes plages de temps dans les requêtes.
  • Allocation déséquilibrée des partitions entre les nœuds ou nombre trop élevé de partitions dans un cluster.
  • Foisonnement de données de champ ou de mappage d'index.
  • Types d'instance ne gérant pas les charges entrantes.

Vous pouvez résoudre les problèmes dus à une forte sollicitation de la mémoire JVM en réduisant le trafic à destination du cluster. Pour réduire le trafic à destination du cluster, procédez comme suit :

  • Effacez le cache des données de champ en effectuant l'opération d'API POST /index_name/_cache/clear?fielddata=true.
    Remarque : le nettoyage du cache peut perturber les requêtes en cours.
  • Évitez les regroupements sur les champs de texte ou optez pour un mappage de type Mot clé.
  • Mettez le domaine à l'échelle (de sorte que la taille de tas maximale par nœud soit de 32 Go).
  • Activez la journalisation lente pour identifier les demandes défaillantes.
    Remarque : vérifiez que le niveau de sollicitation de la mémoire JVM est inférieur à 90 %. Pour obtenir des informations supplémentaires sur les requêtes Elasticsearch lentes, consultez la section Résolution des problèmes de lenteur des requêtes Elasticsearch sur le site Web d'Elastic.
  • Optimisez l'indexation de recherche et choisissez le nombre correct de partitions. Pour obtenir des informations supplémentaires sur l'indexation et le nombre de partitions, consultez la section Démarrer avec Amazon Elasticsearch Service : de combien de partitions ai-je besoin ?.
  • Réduisez le nombre de partitions en supprimant les index anciens ou inutilisés.
  • Configurez les disjoncteurs JVM. Pour obtenir des informations supplémentaires sur les disjoncteurs JVM, consultez la section JVM OutOfMemoryError.

Pour obtenir des informations supplémentaires sur la résolution des problèmes liés à une forte sollicitation de la mémoire JVM, consultez la section Pourquoi mon nœud Elasticsearch est-il défaillant ?.