2012-09-12 5 views
7

У меня есть большой (5GB) hprof дамп, созданный приложением, когда произошло OutOfMemoryError. (С использованием XX: HeapDumpOnOutOfMemoryError).Можно ли просматривать потоки из hprof dump/threads в куче кучи

К сожалению, в случае возникновения этой ошибки нет журналов. Повторное создание этого займет пару часов. Я надеялся, что некоторые инструменты могут показать трассировку стека исключений или все стеки потоков и т. Д. Из hprof.

В настоящее время я использую MAT, не смог найти способ получить информацию о потоке. Какой инструмент я мог бы использовать?

(Я не уверен, имеет ли файл hprof информацию о потоке/местоположении вызова при возникновении OOM).

(я знаю, как взять нить дамп в обычных случаях. Проблема здесь это событие уже произошло, все у меня есть, HPROF свалка.)

+1

Try VisualVM (http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads .html) –

+0

Дамп кучи не содержит информации о потоках. Вы должны посмотреть на дамп потока. – SiB

+0

@ RC. да, загруженный hprof с помощью VisualVM, и у него есть опция для отображения дампов потоков. Не могли бы вы отметить как ответ? – Jayan

ответ

3

MAT может show the threads directly now (возможно, это было добавлено, так как был задан вопрос).

Темы Обзор

Чтобы получить обзор всех потоков в дампа кучи использовать «Thread Обзор» кнопку на панели инструментов, как показано на изображении ниже. В качестве альтернативы можно использовать браузер Query> Thread Обзор и стеки запрос:

screenshot of toolbar icon

+0

!! Наконец, реальный ответ на мой вопрос :) – Jayan

0

Я не думаю, что дамп кучи содержит информацию о нити кроме GC root. Если вам нужна информация, связанная с потоком, вам также нужно взять дамп потока.

0

Eclipse MAT позволяет видеть подозрительные потоки в отчете о подозреваемых в утечке. Ищите классы в пространстве имен приложений с номерами строк, чтобы узнать, сколько памяти они занимают в куче. Это даст вам намек на протекающие классы.

0

Вы можете убить -3 идентификатора процесса, чтобы получить дамп потока для стандартного вывода. Это не приведет к уничтожению java-процесса, поэтому вы можете делать это столько раз, сколько хотите.

как показано на рисунке. VisualVM - хороший инструмент, который даст вам количество объектов по типу класса и всех видов графиков и профилирующих инструментов.

0

Использование visualvm.

попытки проанализировать график, когда завивка куча пространство превышает ... и должен также проверить образцы памяти & сохранить свой снимок ..

Анализ стеки потоков ... поможет вам сузить проблемы ,

11

Ответ на свой вопрос. Кредитная карта до @ RC

  1. Открыть дамп с помощью visualvm. Это требует времени.
  2. нажмите на «потоках в куче сваливать»

visual vm with threads at heapdump

+0

http://stackoverflow.com/a/11903624/173149 говорят, что это «новая» особенность формата дампа кучи (датируется около 2010 года). – gavenkoa

+1

Долгое время это был ответ. Теперь MAT улучшил отчетность. См. Ответ от @matt b: http://stackoverflow.com/questions/12381534/is-it-possible-to-view-threads-from-hprof-dump-threads-in-heap -dump/41243806 # 41243806 – Jayan

-1

Для включения опции вашей потребности + и отключить опцию вам нужен -

Смущает о документации что он показывает настройку по умолчанию, чтобы он «очистил» настройки, которые у вас уже есть. Те, у кого +, по умолчанию включены, а те, у которых есть -, по умолчанию отключены. Это означает, что если вы скопируете любую из опций + или - из документации, они ничего не должны делать (кроме случаев, когда значение по умолчанию менялось со временем)

-XX: -HeapDumpOnOutOfMemoryError отключает дамп кучи, который является значением по умолчанию.

-XX: + HeapDumpOnOutOfMemoryError включает дамп кучи.