2013-06-20 25 views
6

Java 6 güncellemesinde 45 çalışan bir JBoss uygulama sunucumuz var. Kendimizi tanıtmış olduğumuz OutOfMemoryErrors'a çalışıyoruz. Bunları analiz etmek ve bir yığın dökümü oluşturmak istiyoruz. Bu aşağıdaki istisna ile başarısız olur.ReadVirtual nedeniyle yığın dökümü oluşturulamadı

Stackoverflow'u taramak ve aramak bana çok yardımcı olmadı, bu makineden nasıl bir yığın dökümü elde etme konusunda bir fikri var mı?

Teşekkürler!

Martin

istisnadır:

C:\>"d:\Program Files\Java\bin\"jmap -F "-dump:format=b,file=D:\heapdumps\20130620_085902_heap.dump" 1832 
Attaching to process ID 1832, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 20.45-b01 
Dumping heap to D:\heapdumps\20130620_085902_heap.dump ... 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at sun.tools.jmap.JMap.runTool(JMap.java:179) 
     at sun.tools.jmap.JMap.main(JMap.java:110) 
Caused by: sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: ReadVirtual failed! 
     at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess0(Native Method) 
     at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess(WindbgDebuggerLocal.java:485) 
     at sun.jvm.hotspot.debugger.DebuggerBase$Fetcher.fetchPage(DebuggerBase.java:76) 
     at sun.jvm.hotspot.debugger.PageCache.getPage(PageCache.java:178) 
     at sun.jvm.hotspot.debugger.PageCache.getInt(PageCache.java:96) 
     at sun.jvm.hotspot.debugger.DebuggerBase.readCInteger(DebuggerBase.java:355) 
     at sun.jvm.hotspot.debugger.DebuggerBase.readCompOopAddressValue(DebuggerBase.java:459) 
     at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readCompOopHandle(WindbgDebuggerLocal.java:332) 
     at sun.jvm.hotspot.debugger.windbg.WindbgAddress.getCompOopHandleAt(WindbgAddress.java:122) 
     at sun.jvm.hotspot.oops.Oop.getKlassForOopHandle(Oop.java:235) 
     at sun.jvm.hotspot.oops.ObjectHeap.newOop(ObjectHeap.java:378) 
     at sun.jvm.hotspot.oops.ObjectHeap.iterateLiveRegions(ObjectHeap.java:464) 
     at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:249) 
     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 
+0

[Bu hata] (http://bugs.sun.com/view_bug.do ? bug_id = 6987812) ilgili görünüyor, ancak sabit olarak işaretlenmiş ... – fge

+0

Evet, biri Googling'de bulduğum mesajlar, ancak bir 6u45 JDK'sında bir sorun olmamalı ... – SunSear

+0

Belki de mümkün olursa OpenJDK 6 ile yeniden üretebilir ve tekrarlanabilirse onlara bir hata açabilirsin? – fge

cevap

0

Hmm, başka bir web sitesinde cevap buldu ve bu işe görünüyor. üzerinde bulunan gibi

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof 

: aşağıdaki seçeneklerle bir OutOfMemoryError karşılaştığında Şimdi bir yığın dökümü yapmak için JVM soruyorsunuz

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

+1

Tamam, bu, başlangıç ​​parametrelerine erişiminiz varsa ve işlem henüz çalışmıyorsa iyi çalışır. Bununla birlikte, istisnadan kurtulmak için "gerçek" bir çözüm arıyorum. Ne yazık ki, yazılım eski bir JRE sürümü ile birlikte gönderilir, bu nedenle JRE güncellemesi yardımcı olmaz. Başka bir yol buldun mu? – Dani

0

puanın altında kontrol edin,

  1. Komut konsolunu JDK (jmap komutu için) ve JRE sürüm
  2. sürümü olarak çalıştırın. (Java uygulama ortamı) aynı olmalıdır.
  3. Eğer JDK/JRE ile istisna JDK/JRE 8
Aslında

Ben JDK 7 ile JMAP bazı problemiyle karşılaştım ama JDK 8 taşındıklarında, başarıyla oluşturmak başardık ile aynı 7try var komutu altında

JMAP -dump kullanılarak yığın dökümü: dosya = d: \ heapDump \ myHeapDump.hprof -F