web-dev-qa-db-fra.com

Comment analyser un fichier .hprof?

J'ai un serveur de production en cours d'exécution avec l'indicateur 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 n’avaient aucun moyen d’obtenir des informations utiles.

Des idées?

208
Nick Stinemates

Si vous voulez un outil assez avancé pour faire des recherches sérieuses, jetez un œil à projet Memory Analyzer chez Eclipse, auquel SAP a contribué.

Certaines des choses que vous pouvez faire sont incroyablement bonnes pour trouver des fuites de mémoire, etc. - y compris exécuter une forme de SQL limité (OQL) sur les objets en mémoire, c.-à-d.

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

Totalement brillant.

197
Cowan

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 démarre un serveur Web/navigateur 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 du bas "exécuter OQL")

64
CMS

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

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

34
James Schek

Obtenez juste le analyseur de mémoire Eclipse . Il n'y a rien de mieux et c'est gratuit.

JHAT est uniquement utilisable pour les "applications de jouets"

12
kohlerm

YourKit Java Profiler semble les gérer également.

9
Polaris

Si vous voulez faire une analyse personnalisée de votre heapdump, alors il y a:

Cette bibliothèque est rapide mais vous devrez écrire votre code d'analyse en Java.

De la docs:

  • Ne crée pas de fichiers temporaires sur le disque pour traiter le vidage de tas
  • Peut travailler directement avec les dumps de tas compressés GZ
  • Notation HeapPath
5
Andrejs