Comment puis-je prendre une décharge de tas sur Java 5 sans la collecte des ordures d'abord?

StackOverflow https://stackoverflow.com/questions/1268336

Question

Nous avons une application serveur en cours d'exécution en cours d'exécution à long Java 5, et le profilage, il nous pouvons voir l'ancienne génération de plus en plus lentement au fil du temps. Il est libéré correctement sur un GC plein, mais je voudrais pouvoir regarder les objets inaccessibles dans Eclipse MAT à l'aide d'une décharge de tas. Je l'ai obtenu avec succès une décharge de tas en utilisant + XX: HeapDumpOnCtrlBreak, mais la machine virtuelle Java fait toujours un GC avant de vider le tas. Apparemment, cela ne se produit pas sur Java 6, mais nous sommes coincés sur 5 pour l'instant. Y at-il moyen d'empêcher cela?

Était-ce utile?

La solution

Je suggère un profileur 3ème partie, comme YourKit , ce qui peut vous permettre de prendre des instantanés sans le coup d'envoi du GC en premier. En bonus, vous pouvez prendre un instantané sans toute manigances ctrl-break.

Autres conseils

utiliser jconsole ou visualvm ou JMC ou ... autre console de gestion JMX. ouvrir HotSpotDiagnostic à com.sun.management. Procédé de sélection dumpheap et l'entrée de deux paramètres:

  • chemin vers le fichier de vidage
  • (vrai / faux) ne sauvegarder que les objets vivants. utiliser false pour vider tous les objets.

Notez que le fichier de vidage sera écrit par la machine virtuelle Java vous connecté à, non par jVisualVM, donc si la machine virtuelle Java est en cours d'exécution sur un autre système, il sera écrit sur ce système.

 ici

Avez-vous essayé l'outil standard jmap livré avec le JDK? Le bilan de jmap a été officiellement introduit en Java 5.

ligne de commande Exemple: / Java / bin / jmap -heap: format = b

Le résultat peut être traité avec l'outil standard jhat ou avec des applications graphiques telles que MAT.

J'ai un code ici qui peut prendre un programme décharge de tas sur JMX:

Lien: JmxHeapDumper.java

Les commentaires dans le code source contiennent 2 liens vers des articles contenant des informations utiles sur la façon de prendre des décharges de tas. Je ne sais pas pour vous, mais si vous avez de la chance, peut-être l'approche JMX aurais une certaine façon d'éviter le GC. Espérons que cela aide!

JProfiler ( ej-technologies ) peut le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top