J'ai un serveur de production fonctionnant avec l'indicateur suivant: - XX: + HeapDumpOnOutOfMemoryError
Hier soir, il a généré un fichier java-38942.hprof lorsque notre serveur a rencontré une erreur de segment de mémoire. Il s'avère que les développeurs du système connaissaient le drapeau mais aucun moyen d'en tirer des informations utiles.
Des idées?
Vous pouvez utiliser JHAT , l'outil d'analyse de tas Java fourni par défaut avec le JDK. C'est la ligne de commande mais démarre un serveur / navigateur Web que vous utilisez pour examiner la mémoire. Pas le plus convivial, mais au moins il est déjà installé dans la plupart des endroits où vous irez. Une vue très utile est le lien "histogramme de tas" tout en bas.
ex:
jhat -port 7401 -J-Xmx4G dump.hprof
jhat
peut également exécuter OQL "ces jours-ci" (lien inférieur "exécuter OQL")la source
Vous pouvez également utiliser HeapWalker à partir du Netbeans Profiler ou de l' outil autonome Visual VM . Visual VM est une bonne alternative à JHAT car il est autonome, mais il est beaucoup plus facile à utiliser que JHAT.
Vous avez besoin de Java 6+ pour utiliser pleinement Visual VM.
la source
jvisualvm.exe
auJAVASDK/bin
dossierObtenez simplement l' analyseur de mémoire Eclipse . Il n'y a rien de mieux là-bas et c'est gratuit.
JHAT n'est utilisable que pour les "applications jouets"
la source
YourKit Java Profiler semble également les gérer.
la source
Si vous souhaitez effectuer une analyse personnalisée de votre tas, alors il y a:
Cette bibliothèque est rapide mais vous devrez écrire votre code d'analyse en Java.
De la documentation:
la source
Personnellement, je préfère VisualVM. L'une des fonctionnalités que j'aime dans VisualVM est la comparaison de vidage de tas. Lorsque vous effectuez une analyse de vidage de tas, il existe différentes façons de déterminer la cause de l'accident. L'une des façons dont j'ai trouvé utile est de comparer les décharges en tas saines et malsaines.
Voici les étapes que vous pouvez suivre pour cela:
lien: https://visualvm.github.io
la source