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.
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.