DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Simulation et dépannage d’OOMError dans Scala
    Uncategorized

    Simulation et dépannage d’OOMError dans Scala

    février 7, 2023
    Simulation et dépannage d'OOMError dans Scala
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Alors que nous continuons dans cette série de problèmes de performances de simulation et de dépannage dans Scala, discutons maintenant de la façon de simuler le java.lang.OutOfMemoryError: Java Heap espace problème. java.lang.OutOfMemoryError: Java Heap space sera lancée par l’application Scala lorsqu’elle génère plus d’objets que la taille de tas maximale configurée.

    Programme Scala OutOfMemoryError

    Voici un exemple de programme Scala, qui génère le java.lang.OutOfMemoryError: Java Heap space problème:

    package com.yc 
    import java.util 
    class OOMApp { 
    }
    object OOMApp {   
       var myMap = new util.HashMap[String,String]()      
          def main(args: Array[String]): Unit = {         
           var counter = 0;            
             while (true) {               
               System.out.println("Inserting large String")               
               myMap.put("key"+counter, "Large stringgggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + "ggggggggggggggggggggggggggggggggggggggggggggggggggggg"               
               + counter)               
               counter = counter+(1);            
            }      
        } 
    }

    Cet exemple de programme Scala contient un OOMApp classe. Étant donné que cette classe contient les while(true) boucle, il continue d’insérer des enregistrements dans la HashMap infiniment. Quand HashMap croît au-delà de la taille de tas maximale (c’est-à-dire -Xmx), le java.lang.OutOfMemoryError: Java Heap space sera jeté. Le schéma ci-dessous illustre les enregistrements présents dans le HashMap.

    HashMap provoquant OutOfMemoryError

    HashMap provoquant OutOfMemoryError

    Lorsque nous avons exécuté le programme ci-dessus, comme prévu, java.lang.OutOfMemoryError: Java heap space a été lancé en quelques secondes.

    Même s’il s’agit d’un exemple hypothétique qui simule java.lang.OutOfMemoryError, c’est ainsi qu’une fuite de mémoire typique se produit dans les applications d’entreprise. Lorsque des enregistrements sont insérés dans une structure de données (comme HashMap, ArrayList, Setetc.) et ne jamais être retiré, java.lang.OutOfMemoryError sera jeté.

    Comment dépanner OutOfMemoryError

    Vous pouvez diagnostiquer OutOfMemoryError soit par une approche manuelle ou automatisée.

    Approche manuelle

    Dans l’approche manuelle, vous devrez capturer un vidage de tas comme première étape. Un vidage de tas est un instantané de la mémoire qui affiche tous les objets en mémoire, les valeurs contenues par ces objets et leurs références. Vous pouvez capturer un vidage de tas en utilisant l’une des 7 approches données ici, mais un critère important est que vous devez capturer le vidage de tas juste avant OutOfMemoryError Est lancé. Si vous comptez capturer un vidage de tas après OutOfMemoryError s’est produit, les objets qui fuient peuvent être collectés et il deviendra difficile (voire impossible) de diagnostiquer le problème. Une fois les vidages de tas capturés, vous devez importer les vidages de tas de vos serveurs de production vers votre machine locale. À partir de votre ordinateur local, vous pouvez utiliser des outils d’analyse de vidage de tas comme jHat et HeapHero pour analyser les vidages de tas.

    Approche automatisée

    D’autre part, vous pouvez également utiliser le script open source yCrash, qui capturerait des données à 360 degrés (journal GC, 3 instantanés de thread dump, heap dump, netstat, iostat, vmstat, top, top -H, etc.) depuis votre pile d’applications en une minute et générez un fichier zip groupé. Vous pouvez ensuite analyser manuellement ces artefacts ou les télécharger sur le serveur yCrash pour une analyse automatisée.

    Nous avons utilisé l’approche automatisée. Une fois que les artefacts capturés ont été téléchargés sur le serveur yCrash, il a généré instantanément le rapport d’analyse des causes profondes ci-dessous mettant en évidence la source du problème.

    Rapport d'analyse de vidage de tas généré par l'outil yCrash

    Rapport d’analyse de vidage de tas généré par l’outil yCrash

    Outil yCrash indiquant la cause première de OutOfMemoryError

    Outil yCrash indiquant la cause première de OutOfMemoryError

    Le rapport d’analyse de vidage de tas ci-dessus provient de l’outil qui indique précisément que le HashMap (c’est à dire, myMap) structure de données présente dans le com.yc.OOMApp$.myMap être à l’origine de la fuite de mémoire. En outre, l’outil signale que cela HashMap détient 99% de la mémoire.

    Équipé de ces informations, on peut facilement aller de l’avant et corriger le code problématique.

    Vidéo

    Pour voir la présentation visuelle de cet article, cliquez ci-dessous :



    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.