Как долго можно вычислять сохраненные размеры в визуальной виртуальной машине для кучи объемом 1 ГБ? - PullRequest
9 голосов
/ 29 ноября 2011

У меня есть дамп кучи размером 1 ГБ из процесса Java, который исчерпал пространство кучи. Я загрузил кучу в jvisualm, который поставляется с дистрибутивом java6. Я запустил процесс «Вычислить оставшиеся размеры» около 16 часов назад, и он все еще работает. Сколько времени потребуется, чтобы запустить вычисленные сохраненные размеры для 20 лучших объектов в куче 1 ГБ? Должен ли я ожидать, что это когда-нибудь закончится?

Ответы [ 2 ]

5 голосов
/ 29 ноября 2016

На моей машине это тоже может длиться вечно, но из диспетчера задач я заметил, что больше ничего не происходит (низкая загрузка ЦП, дисковый ввод / вывод). Причина в том, что, хотя индикатор прогресса продолжает отображать анимацию, действие было молча прервано в соответствии с файлом журнала.

Чтобы открыть журнал, я использовал следующие шаги:

  • Нажмите Справка
  • Нажмите О
  • Нажмите Logfile

Это показало мне внизу журнала:

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-битного Java VM Heapsize будет ограничен 25% памяти моего компьютера (или даже намного более низким встроенным пределом VisualVM). Чтобы решить эту проблему для следующей попытки, я попытаюсь снова запустить VisualVM следующим образом:

jvisualvm.exe -J-Xmx16g

После этого при запуске отображается лог:

Heap memory usage: initial 24,0MB maximum 14563,6MB
2 голосов
/ 17 января 2012

У меня была куча 600 МБ, которая потребовала 900 минут процессора для вычисления оставшихся размеров. Это 15 часов. Я бы предположил, что это очень связано с тем, что находится в куче, поэтому я не буду экстраполировать на вашу кучу (также вы указали, что она не завершилась;), но это еще одна точка данных.

...