2013-05-16 28 views
15

Próbuję wygenerować zrzut sterty na moim komputerze, na którym działa glassfish 3.1.2, używając java open-jdk7.Błąd zrzucania sterty w Centos 64bit i openjdk 7

Używam następujące polecenia:

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

ale wciąż otrzymuję ten błąd:

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 

Oto moja pełna wersja 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) 

Dokładna CentOS Wersja jest:

CentOS release 6.3 (Final) 

Wszelkie pomysły?

+0

Czy zostało to naprawione? Mam taki sam – Peter

+0

tak, ale obawiam się, że już nie pamiętam dokładnie, co zrobiłem. Mogę ci tylko powiedzieć, że miało to coś wspólnego z opcjami polecenia: – ufasoli

Odpowiedz

13

publikowania tego więc ja nie zapominam roztworowi sobie: P

to działa:

$ 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 

ta zawodzi:

$ 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

te, które nie mają już opcji -F ? – rogerdpack

2

Spróbuj uruchomić bez opcji -F

+2

Niestety, bez -FI otrzymam '12829: Nie można otworzyć pliku gniazda: proces docelowy nie odpowiada lub nie jest załadowany HotSpot VM' – rogerdpack

0

Jeśli nie masz możliwości przekompilowania kodu za pomocą symboli debugowania i masz skonfigurowany JMX, możesz spróbować wygenerować zrzut sterty za pomocą VisualVM.

W tym celu uruchom VisualVM i połącz się z hostem za pomocą JMX. Na tylnym panelu monitora zobaczysz przycisk "Head Dump".

Format pliku zrzutu będzie inny, ale będzie można go otworzyć za pomocą jhat lub VisualVM.

4

Może to być związane, ale w niektórych wersjach Javy, nie wydaje się być niewielkie kuriozum na niedawnym RHEL/CentOS (wersja> = 6), przy czym jmap, jstack i przyjaciele muszą być uruchamiane jako dokładnym użytkownika, rozpoczął proces - i nie zadziała, jeśli zostanie uruchomiony jako root.

poleceniem:

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

powinny dbać o to, zakładając, że masz odpowiednie uprawnienia sudo.