2013-05-16 21 views
15

Sto provando a generare un dump dell'heap sul mio computer che esegue un glassfish 3.1.2 utilizzando un java open-jdk7.Errore di dump heap su Centos 64bit e openjdk 7

sto usando il seguente comando:

jmap -dump:live,format=b,file=dump.t -F 24935 

Ma continuo a ricevere questo errore:

Attaching to process ID 24935, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 23.7-b01 
Dumping heap to dump.t ... 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at sun.tools.jmap.JMap.runTool(JMap.java:197) 
     at sun.tools.jmap.JMap.main(JMap.java:128) 
Caused by: sun.jvm.hotspot.utilities.AssertionFailure: Expecting GenCollectedHeap, G1CollectedHeap, or ParallelScavengeHeap, but got sun.jvm.hotspot.gc_interface.CollectedHeap 
     at sun.jvm.hotspot.utilities.Assert.that(Assert.java:32) 
     at sun.jvm.hotspot.oops.ObjectHeap.collectLiveRegions(ObjectHeap.java:605) 
     at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:244) 
     at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.write(AbstractHeapGraphWriter.java:51) 
     at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:416) 
     at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:56) 
     at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) 
     at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77) 
     ... 6 more 

Qui è la mia versione di Java:

[ufasoli]$ java -version 
java version "1.7.0_19" 
OpenJDK Runtime Environment (rhel-2.3.9.1.el6_4-x86_64) 
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) 

L'esatta CentOS versione è:

CentOS release 6.3 (Final) 

Qualche idea?

+0

È stato riparato? sto affrontando lo stesso – Peter

+0

in realtà sì, ma temo di non ricordare più esattamente quello che ho fatto. Quello che posso dirti è che ha qualcosa a che fare con le opzioni di comando – ufasoli

risposta

13

questo distacco così io non continuo a dimenticare la soluzione me: P

Questo funziona:

$ sudo /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51.x86_64/bin/jmap -dump:format=b,file=./testDump 8894 
Dumping heap to /home/<snip>/testDump ... 
Heap dump file created 

Questo fallisce:

$ sudo /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51.x86_64/bin/jmap -heap:format=b  8894 
Attaching to process ID 8894, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.45-b08 
Dumping heap to heap.bin ... 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at sun.tools.jmap.JMap.runTool(JMap.java:197) 
at sun.tools.jmap.JMap.main(JMap.java:128) 
Caused by: sun.jvm.hotspot.utilities.AssertionFailure: Expecting GenCollectedHeap, G1CollectedHeap, or ParallelScavengeHeap, but got sun.jvm.hotspot.gc_interface.CollectedHeap 
at sun.jvm.hotspot.utilities.Assert.that(Assert.java:32) 
at sun.jvm.hotspot.oops.ObjectHeap.collectLiveRegions(ObjectHeap.java:604) 
at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:244) 
at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.write(AbstractHeapGraphWriter.java:51) 
at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:416) 
at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:56) 
at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) 
at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77) 
... 6 more 
+1

quelli non hanno più l'opzione -F ? – rogerdpack

2

Provare a eseguire senza l'opzione -F

+2

sfortunatamente senza -FI get '12829: Impossibile aprire il file socket: processo di destinazione non risponde o VM HotSpot non caricata' – rogerdpack

0

Se non si ha la possibilità di ricompilare il codice con i simboli di debug e si dispone di JMX configurato, è possibile provare a generare un heapdump con VisualVM.

Per questo, avviare VisualVM e connettersi all'host tramite JMX. Nella parte superiore del pannello del monitor, vedrai un pulsante "Head Dump".

Il formato è il file di dump sarà diverso, ma sarà possibile aprirlo con jhat o VisualVM.

4

questo potrebbe essere correlato, ma su alcune versioni di Java, sembra che ci sia una leggera stranezza sulla recente/Centos RHEL (versione> = 6), per cui jmap, jstack e gli amici hanno bisogno di essere eseguito come l'esatto utente che avviato il processo - e non funzionerà se eseguito come root.

un comando come:

sudo -H -u <USERNAME WHO STARTED PROCESS> jmap -histo <PID> 

dovrebbe prendersi cura di esso, a patto di avere adeguati privilegi sudo.

Problemi correlati