FUITES DE MÉMOIRE

SOLUTIONS

Les mystérieuses consommations de mémoire peuvent provoquer d'énormes problèmes dans la production des applications Java — surtout quand les réglages JVM par défaut sont utilisés et finissent par causer des problèmes de performance. AppDynamics peut vous aider à dépanner et à identifier les fuites de mémoire JVM, OutOfMemory exceptions et les autres problèmes liés à la mémoire, même dans un environnement de production à grande échelle.

Comprendre la véritable utilisation des pools de mémoire

En utilisant une solution comme AppDynamics, vous pourrez facilement contrôler les différentes tailles des pools de mémoire au fil du temps afin de comprendre si votre application est près de subir une fuite de mémoire, afin que vous puissiez mieux paramétrer votre mémoire JVM et prévenir des fuites de mémoire Java. Par exemple, des OutOfMemory Exceptions peuvent se produire quand l'espace PermGen est épuisé par le code d'application, qui prend parfois plus de place que l'espace Perm Gen par défaut dans la mémoire, généralement 64 à 128 Mo.

Ne craignez pas les gros volumes de données

Une autre raison habituelle des exceptions OutOfMemory: lorsque l'application fait des requêtes sur de gros volumes de données dans des bases de données relationnelles et tente de les persister et de les traiter dans la mémoire JVM. Avec AppDynamics, vous pouvez détecter les fuites de mémoire et suivre l'utilisation du tas dans le temps, le décompte d'objets et la taille physique (en Mo) des objets résidant dans la mémoire. Ceci vous donne une bonne visibilité du volume de données persistantes dans la JVM à un moment défini, et dans quelle mesure votre mémoire est épuisée par les différents objets types et structures de données. Vous pouvez également relier ces informations aux cycles de nettoyage de mémoire afin de connaître la fréquence à laquelle la JVM réclame de la mémoire. Le nettoyage de mémoire est un événement qui force la JVM à tout arrêter. Il est donc important de savoir si cela survient souvent et l'impact que cela peut avoir sur les temps de réponse de votre application.

Identifier la source des fuites de mémoire rapidement

Si vous avez des fuites de mémoire dans Java, il est certain que ce n'est pas drôle de passer des heures à traîner dans les thread dumps et les profileurs. Et il ne faut pas non plus tenter un heap dump quand la surcharge système pourrait endommager votre application. Mais la détection des fuites de mémoire de Java par AppDynamics peut localiser et signaler les fuites dans les structures de données:

AppDynamics suit automatiquement la taille et la croissance des collections en Java telles que HashMap, HashSets et ConcurrentLinkedQueues au fil du temps, au fur et à mesure que les données dans votre application sont requises et persistées dans la mémoire JVM. AppDynamics utilise des algorithmes intelligents pour détecter les collections susceptibles de fuir et les signaler automatiquement pour permettre aux utilisateurs de rechercher et inspecter les contenus, afin de mieux comprendre quels objets sont alloués et quelle quantité de mémoire ils consomment dans la collection.

Par exemple, la capture d'écran ci-dessus montre que 109 377 objets String ont été alloués à une collection qui occupe environ 46 Mo de mémoire. Une fois identifiés les types d'objets alloués, l'étape suivante est de déterminer le code de l'application allouant ces objets afin de réparer la fuite de mémoire. Cela est possible grâce à la fonction « Suivi d'accès » détaillée ci-dessous, qui indique quel chemin du code est responsable de l'allocation d'objets (put()) de la collection fuyante. Dans l'exemple ci-dessous, c'est la méthode collectionleak.dosomework() qui ajoute à la collection HashSet. On peut également remarquer que la transaction métier « ordre d'achat » est responsable de ce chemin de code, et ainsi déterminer la réelle cause profonde et l'impact commercial de la fuite de mémoire.

AppDynamics fournit un moyen facile de surveiller et de gérer la mémoire et d'identifier les fuites de mémoire. Contrairement à des nombreux outils de surveillance de mémoire (ou de connexion), AppDynamics peut fonctionner dans votre environnement de production sans y ajouter trop de surcharge système -- cela signifie que vous pouvez dépanner et résoudre les problèmes liés à la mémoire dans votre application, sans vous préoccuper des conséquences sur les utilisateurs finaux.

Vous voulez l'essayer pour vous-même ? Profitez de l'essai gratuit d'AppDynamics Pro...