2011-11-29 36 views
8

मेरे पास एक जावा प्रक्रिया से 1 जीबी हीप डंप है जो ढेर अंतरिक्ष से बाहर हो गया है। मैंने jvisualm में ढेर अपलोड किया है जो जावा 6 वितरण के साथ आता है। मैंने लगभग 16 घंटे पहले "गणना बनाए गए आकार" प्रक्रिया शुरू की और यह अभी भी चल रहा है। 1 जीबी ढेर पर शीर्ष 20 वस्तुओं के लिए गणना बनाए गए आकार को चलाने में कितना समय लगेगा? क्या मुझे उम्मीद है कि यह कभी खत्म हो जाए?1 जीबी ढेर के लिए दृश्य वीएम में गणना बनाए गए आकारों को कितना समय तक चलाना है?

+0

मैं तुम्हें किस बारे में बात कर रहे हैं की पता नहीं है (मुझे जावा के साथ थोड़ा सा अनुभव है), लेकिन मेरा तर्क मुझे बताता है कि यदि आप इसे 1 गीगाहर्ट्ज पर 1 जीबी रैम (या कम) सिस्टम के साथ नहीं चला रहे हैं, तो 16 घंटे बहुत अधिक है ... – ComputerSaysNo

+0

बस जिज्ञासा के लिए, क्या समाप्त? इसके लिए कितना समय लगा? अगर यह खत्म नहीं हुआ, तो दूसरा रन सफलतापूर्वक समाप्त हुआ? – uhm

+0

यह कभी खत्म नहीं हुआ। मैंने आपकाकिट परीक्षण डाउनलोड करना समाप्त कर दिया और यह लगभग 20 मिनट में एक ही प्रक्रिया समाप्त कर दिया। – Joe

उत्तर

1

मेरे पास 600 एमबी ढेर था जो बनाए गए आकारों की गणना करने के लिए 900 सीपीयू-मिनट का समय लेता था। वह 15 घंटे है। मुझे लगता है कि यह ढेर पर क्या है उससे बहुत संबंधित है, इसलिए मैं आपके ढेर में नहीं फैलता हूं (यह भी आपने बताया कि यह खत्म नहीं हुआ;), लेकिन यह एक और डेटा बिंदु है।

4

ऐसा लगता है कि यह हमेशा भी मेरी मशीन पर ले जाता है, लेकिन मैंने टास्कमैनगर से देखा कि अब कुछ भी नहीं हुआ (कम CPU यूज, डिस्क I/O)। इसका कारण यह था कि हालांकि प्रगति सूचक एक एनीमेशन दिखाता रहता है हालांकि लॉग फ़ाइल के अनुसार कार्रवाई को चुपचाप निरस्त कर दिया गया था।

लॉग मैंने ये चरण इस्तेमाल किया खोलने के लिए:

:

  • क्लिक करें मदद
  • क्लिक करें के बारे में
  • लॉगफ़ाइल क्लिक करें

यह मैं लॉग के तल पर पता चला

SEVERE [org.openide.util.RequestProcessor] 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at java.util.HashMap.newNode(HashMap.java:1734) 
    at java.util.HashMap.putVal(HashMap.java:630) 
    at java.util.HashMap.put(HashMap.java:611) 
    at java.util.HashSet.add(HashSet.java:219) 
    at org.netbeans.lib.profiler.heap.DominatorTree.intersect(DominatorTree.java:279) 
    at org.netbeans.lib.profiler.heap.DominatorTree.computeOneLevel(DominatorTree.java:114) 
    at org.netbeans.lib.profiler.heap.DominatorTree.computeDominators(DominatorTree.java:64) 
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSize(HprofHeap.java:537) 
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSizeByClass(HprofHeap.java:594) 
    at org.netbeans.lib.profiler.heap.ClassDump.getRetainedSizeByClass(ClassDump.java:102) 
    at org.netbeans.modules.profiler.heapwalk.HeapFragmentWalker.computeRetainedSizes(HeapFragmentWalker.java:100) 
    at org.netbeans.modules.profiler.heapwalk.ClassPresenterPanel$1$1.run(ClassPresenterPanel.java:187) 
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1393) 
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2003) 

डिफ़ॉल्ट रूप से मेरा 64 बिट जावा वीएम हेपसाइज मेरे कंप्यूटर मेमोरी के 25% तक सीमित होगा (या यहां तक ​​कि बहुत कम VisualVM बिल्टिन सीमा)। मेरी अगली प्रयास मैं फिर से इस तरह VisualVM शुरू करने का प्रयास wil के लिए इस समस्या को हल करने के लिए:

jvisualvm.exe -J-Xmx16g 

इस लॉग बाद स्टार्टअप पर पता चलता है:

Heap memory usage: initial 24,0MB maximum 14563,6MB 
+1

मैंने पाया कि jvisualvm कमांड लाइन से mx कमांड लाइन ध्वज को अनदेखा कर रहा था, क्योंकि यह पहले से ही% JDK_HOME% \ lib \ visualvm \ etc \ visualvm.conf से -Xmx256m के डिफ़ॉल्ट मान में खींच रहा था। Https://stackoverflow.com/questions/9570921/how-do-i-provide-jvm-arguments-to-visualvm देखें –