Yığın boşluğu biten bir java işleminden 1 GB yığın dökümü var. Ben bir java6 dağılımı ile gelen jvisualm içine yığın yükledim. Yaklaşık 16 saat önce "hesaplanmış boyutları hesapla" işlemini başlattım ve hala çalışıyor. 1GB yığınındaki en iyi 20 nesne için hesaplanmış boyutları hesaplamak ne kadar sürer? Hiç bitmesini beklemeli miyim?Görsel VM'de 1GB yığın için ne kadar uzun süre saklanan boyutlar hesaplanır?
cevap
Elde edilen boyutların hesaplanması için yalnızca 900 CPU-dakika süren 600 MB'lık bir yığın vardı. 15 saat. Öbekte ne ile ilgili olduğunu varsayardım, bu yüzden yığınının üstüne çıkmayacağım (aynı zamanda bitirmediğine işaret ettin;), ama başka bir veri noktası.
Makinemde de sonsuza kadar sürecek gibi görünüyor, ancak artık hiçbir şey olmuyormuş gibi göründüğünden görev yöneticisinden fark ettim (düşük CPU uage, Disk I/O). Bunun nedeni, ilerleme göstergesinin bir animasyon göstermeye devam etmesine rağmen, eylemin günlük dosyasına göre sessizce durdurulmasıdır.
Bu adımları kullanılan kaydını açmak için:
:- tıklayın Yardımı
- tıklayın Hakkında
- tıklayın Günlük Dosyası
Bu günlüğün altındaki bana gösterdi
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)
Varsayılan olarak 64 Java VM Heapsize, bilgisayarımın belleğinin% 25'ine (veya daha düşük bir VisualVM yerleşik limitine) sınırlı olacaktır. Böyle visualvm başlayan yeniden deneyin wil benim sonraki denemede için bu sorunu çözmek için:
Heap memory usage: initial 24,0MB maximum 14563,6MB
Ben zaten gelen -Xmx256m varsayılan bir değer çekerek beri jvisualvm, komut satırından mx komut satırı işaretini görmezden olduğunu bulduk% JDK_HOME% \ lib \ visualvm \ vb \ visualvm.conf. Https://stackoverflow.com/questions/9570921/how-do-i-provide-jvm-arguments-to-visualvm sayfasına bakın. –
Ben (eğer bahsettiğini hiçbir fikrim yok: Bu günlük sonra
başlangıçta gösterir Java ile çok az deneyime sahibim, fakat mantığım bana 1 GHz'de 1 GB RAM (veya daha az) sistemle çalışmıyorsa, 16 saatin çok iyi olduğunu söyler ... – ComputerSaysNo
Sadece merak için, öyle mi bitiş? Ne kadar zaman aldı? Eğer bitmedi, ikinci bir çalışma başarıyla tamamlandı mı? – uhm
Hiç bitmedi. Bir YourKit denemesini indirdim ve aynı işlemi yaklaşık 20 dakika içinde bitirdim. – Joe