GOOGLE ADS

jeudi 28 avril 2022

MOO Java sur les nœuds de serveur ignite bien que le tas soit activé

Dans notre projet, nous utilisons actuellement (toujours) Apache Ignite 2.81. Nous sommes actuellement confrontés à des MOO sur des nœuds de serveur lorsque plusieurs clients récupèrent simultanément le contenu d'un cache spécifique. Jusqu'à présent, nous pensions que la raison en était que les données sont stockées uniquement hors tas et donc, à chaque demande client, une copie des données est déplacée dans le tas (-> Heap >= number_of_clients * size_of_cache). Nous nous attendions à atténuer cela en mettant onHeapEnabled = 'True' pour le cache donné car selon notre compréhension, une seule copie des données devrait alors exister dans le tas et elle ne devrait donc plus exploser.

  • Nos hypothèses sont-elles généralement correctes ?

  • Les nœuds de serveur n'utilisent-ils pas une sorte de flux d'octets en interne lorsqu'ils répondent aux données des clients ? Dans ce cas, il serait encore plus surprenant qu'avec le tas activé, le tas explose toujours.

  • Nous sommes conscients que la mise à l'échelle des nœuds de serveur/fournir plus de tas serait une solution ici, mais nous serions intéressés à en trouver une qui économise les ressources.


    Solution du problème

    La cause du MOO est très probablement due aux métriques et métadonnées internes d'Ignite qui sont par client, ce qui provoque un MOO lorsque plusieurs clients récupèrent fréquemment des données à partir de caches (en particulier des données de taille non triviale, puisque les métriques contiennent en interne des références aux données) et il y a des problèmes de connectivité avec ces clients soit à cause de clients lents (en raison de choses comme des pauses JVM, etc.) soit parce que la configuration/les threads du serveur ne sont pas suffisants pour gérer les clients.

    Par conséquent, l' onHeapEnabled = 'True'option ne va pas résoudre le MOO, si quoi que ce soit, cela ne fera qu'empirer les choses.

    Au lieu de cela, je suggérerais que vous activiez Near Cache pour ce cache spécifique que vous mentionnez ainsi que la configuration de choses comme nearStartSize& nearEvictionPolicysur les nœuds clients. Cela résoudra votre problème.

    Notez que les caches proches sont entièrement transactionnels et sont également mis à jour ou invalidés automatiquement chaque fois que les données changent sur les nœuds du serveur, comme clairement mentionné dans la documentation.

    Merci

    Aucun commentaire:

    Enregistrer un commentaire

    Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

    Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...