Erreur Java heap dump avec la commande jmap: EOF prématuré

j'ai rencontré ci-dessous l'exception pendant l'exécution de la commande

jmap -dump:format=b,file=heap_dump.bin <process_id>

sortie:

Dumping heap to <file_name>
Exception in thread "main" java.io.IOException: Premature EOF
            at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248)
            at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199)
            at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
            at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
            at sun.tools.jmap.JMap.dump(JMap.java:242)
            at sun.tools.jmap.JMap.main(JMap.java:140)

version JDK: 1.7.0_45

VM_OPTs:

-Xms2g -Xmx4g  -XX:+UseG1GC -XX:MaxGCPauseMillis=1500 
-XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 

Hardware : RHEL 5.x, 4 core CPU Linux machine 6 GB RAM

selon la base de données des rapports de bogues oracle ( http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554 ), cette question a été fixé état mais je suis toujours obtenir JDK version 1.7 avec build no: 45

pouvez-vous suggérer une solution autre que la mise à niveau vers JDK 1.8, ce qui n'est pas possible dans mon cas en raison d'autres dépendances?

EDIT:

j'ai essayé avec sous commande et ceci la commande too ne fonctionne pas ( generated partial dump file ) et affiche le même EOF prématuré.

jmap -J-d64 -dump:format=b,file=<filename> <pid>

j'ai déclenché la commande avec l'utilisateur qui a lancé le processus. Cet utilisateur avait des permissions d'écriture dans le répertoire. Le fichier a été généré, mais il était incomplet.

9 MB fichier a été écrit pour 2 GB tas, qui n'est pas utilisable pour l'analyse.

10
demandé sur Ravindra babu 2016-04-13 19:14:23

1 réponses

le commentaire de Brian est utile pour résoudre le problème.

si vous utilisez l'algorithme G1GC dans la machine 64 bits:

sous la commande ne fonctionne pas ( à l'exclusion de live option)

jmap -J-d64 -dump:format=b,file=<heap_dump_filename> <pid>

vous devez utiliser l'option ci-dessous pour obtenir le tas dump

jmap -J-d64 -dump:live,format=b,file=<heap_dump_filename> <PID>

il y a quelques suggestions à utiliser -F option pour forcer tas dump mais comme par oracle notes techniques :

- F Force. Utilisez l'option JMap-dump ou JMap-histo si le pid ne répond pas. La sous-option live n'est pas supportée dans ce mode.

puisque le tas dump est requis avec l'option G1GC, l'option ci-dessus ne peut pas être utilisée.

3
répondu Ravindra babu 2016-08-10 17:20:54