272 votes

Comment analyser un fichier .hprof ?

J'ai un serveur de production en cours d'exécution avec le drapeau suivant : -XX:+HeapDumpOnOutOfMemoryError

La nuit dernière, il a généré un fichier java-38942.hprof lorsque notre serveur a rencontré une erreur de tas. Il s'avère que les développeurs du système connaissaient le drapeau mais ne savaient pas comment en obtenir des informations utiles.

Des idées ?

249voto

Cowan Points 17235

Si vous voulez un outil assez avancé pour fouiller sérieusement, regardez le projet Memory Analyzer chez Eclipse, contribué par SAP.

Une partie de ce que vous pouvez faire est incroyablement bon pour trouver des fuites de mémoire, etc. -- y compris l'exécution d'une forme de SQL limité (OQL) contre les objets en mémoire, c'est-à-dire

SELECT toString(firstName) FROM com.yourcompany.somepackage.User

Totalement génial.

20 votes

Je voudrais simplement ajouter un +100 pour Eclipse Memory Analyzer. J'essaie actuellement de trier un fichier de vidage de mémoire de plus de 400 Mo, et il a fallu à jhat plus de 70 minutes pour lire le fichier, avant de provoquer un crash complet du JVM. EMA peut l'ouvrir en moins de 5 minutes.

4 votes

Je continue à obtenir des erreurs d'analyse lors de l'ouverture de fichiers HPROF en utilisant l'Analyseur de mémoire Eclipse (qui ont en fait également été générés par Eclipse!). Malheureux.. soupir.

4 votes

MAT peut toujours nécessiter assez de RAM [moins que JHAT mais quand même pas mal]. Voir stackoverflow.com/questions/7254017/… pour des astuces si vous rencontrez ce problème.

89voto

CMS Points 315406

Vous pouvez utiliser JHAT, l'outil d'analyse de tas Java fourni par défaut avec le JDK. C'est en ligne de commande mais il lance un serveur web/navigateur que vous pouvez utiliser 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 de nos jours (lien en bas "exécuter OQL")

6 votes

Après avoir exécuté la commande ci-dessus dans la console, vous recevrez le message dans le terminal "le serveur est prêt" Port : 7401. Ensuite, ouvrez cette URL : localhost:7401 "vous pouvez voir les détails dans la fenêtre du navigateur".

1 votes

java.io.IOException: Chaîne de version non reconnue à la position 17

1 votes

Ce n'est pas livré par défaut dans les dernières versions d'OpenJDK ou d'Oracle JDK.

39voto

James Schek Points 11070

Vous pouvez également utiliser HeapWalker du profileur Netbeans ou l'outil autonome Visual VM. Visual VM est une bonne alternative à JHAT car il est autonome, mais beaucoup plus facile à utiliser que JHAT.

Vous avez besoin de Java 6+ pour utiliser pleinement Visual VM.

0 votes

Vous devriez ajouter une note indiquant que cela concerne uniquement Java 6 et 7.

0 votes

AFAIK, HeapWalker et VisualVM n'ont pas besoin de Java 6/7 pour lire les fichiers HPROF.

0 votes

Je viens juste d'essayer de le charger avec Java 5 et il a dit 'Veuillez utiliser Java 6 ou 7'. Qu'est-ce que je fais de travers?

15voto

kohlerm Points 1672

Obtenez simplement l'Analyseur de mémoire Eclipse. Il n'y a rien de mieux et c'est gratuit.

JHAT n'est utilisable que pour les "applications jouet"

3 votes

JHAT est nécessaire pour impressionner ces pirates "l33t" qui construisent à la main une distribution BSD à partir de LILO. Attendre ... ils n'utiliseraient jamais Java de toute façon. :-)

0 votes

Je pense que c'est plutôt un commentaire... :\

0 votes

Oui, JHAT est pour les "applications jouets". J'avais un fichier de vidage (9 Go), JHAT fonctionne pendant environ 30 minutes avec un tas de 20 Go et échoue finalement avec OOM. L'analyseur de mémoire Eclipse le gère avec 15 Go de tas en moins d'une minute.

11voto

Polaris Points 51

VotreKit Java Profiler semble également les gérer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X