HPjmeter-подобный графический инструмент для просмотра -agentlib: выход профилирования hprof

Какие инструменты доступны для просмотра результатов встроенного профилировщика JVM? Например, я запускаю свою JVM с помощью:

-agentlib:hprof=cpu=times,thread=y,cutoff=0,format=a,file=someFile.hprof.txt

Это генерирует вывод в формате hprof ( "JAVA PROFILE 1.0.1" ).

У меня был успех в прошлом, используя HPjmeter для разумного просмотра этих выходных файлов. Однако по какой-либо причине файлы, созданные с использованием текущей версии Sun JVM, не загружаются в текущей версии HPjmeter:

java.lang.NullPointerException
    at com.hp.jmeter.f.jb.a(Unknown Source)
    at com.hp.jmeter.f.a.a(Unknown Source)
    at com.hp.c.a.j.z.run(Unknown Source)
Exception in thread "HPeprofDataFileReaderThread" java.lang.AssertionError: null pointer exception from loader
    at com.hp.jmeter.f.a.a(Unknown Source)
    at com.hp.c.a.j.z.run(Unknown Source)

(Почему они запутывают байт-код для бесплатного продукта?!)

Из этого вытекают два вопроса:

  • Кто-нибудь знает причину этой ошибки HPjmeter? ( EDIT: Да - см. ниже)
  • Какие еще существуют инструменты для чтения hprof файлов? И почему нет от Солнца (есть)?

Я знаю Eclipse TPTP, а другие инструменты могут контролировать данные JVMTI "на лету", но мне нужно решение, которое может обрабатывать сгенерированные файлы hprof после того, как развернутая машина имеет только JRE (не JDK).

EDIT. Очень полезный разработчик HPjmeter ответил на мой вопрос на форуме HP ITRC, указав, что heap=dump необходимо временно включить в параметры -agentlib, пока не будет исправлена ​​ошибка в HPjmeter. Эта информация делает HPjmeter жизнеспособной снова, но я все равно оставил бы вопрос открытым, чтобы узнать, знает ли кто-нибудь о других инструментах.

EDIT: с версии 4.0.00 HPjmeter (доступно 05/2009) эта ошибка исправлена.

Ответ 1

Your Kit Java Profiler может читать снимки hprof (я не уверен, что только для профилирования памяти или для CPU). Это не бесплатно, но, безусловно, лучший профилировщик java, который я когда-либо использовал. Он дает результаты ясным, интуитивно понятным способом и хорошо работает на больших наборах данных. Документация также очень хороша.

Ответ 2

Я не уверен на 100%, что он будет работать (похоже, будет), и я не уверен, что он покажет его в нужном вам формате... но подумали ли вы о VisualVM?

Я верю, что он откроет результирующий файл.

Ответ 3

Я использовал Eclipse Memory Analyzer для успешного анализа различных проблем с производительностью. Прежде всего, установите инструмент, как описано на веб-странице проекта в Eclipse.

После этого вы можете создать файл дампа, зная pid jvm для анализа

jmap -dump:format=b,file=<filename>.hprof <jvm_pid> 

Затем просто импортируйте файл .hprof в eclipse. У него есть несколько автоматических отчетов, которые пытаются (для меня они обычно не работают), чтобы указать, какие могут быть возможные проблемы.

Edit:

Отвечая на комментарий: вы правы, это больше похоже на поиск утечки для Java. Для проблем с производительностью я играл с JRat для небольших проектов. Он показывает время, затраченное на каждый метод, количество раз, когда вызывается метод, иерархия вызовов и т.д. Единственная проблема заключается в том, что, насколько я знаю, он не поддерживает файлы .hprof. Чтобы использовать его, вам нужно выполнить вашу программу, добавив аргумент виртуальной машины

-javaagent:<path>/shiftone-jrat.jar

Это создаст каталог с профилем, захваченным инструментом. Затем выполните

 java -jar shiftone-jrat.jar

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

Ответ 4

Для просмотра и анализа вывода hprof=samples или hprof=cpu я использовал PerfAnal с хорошими результатами. Графический интерфейс немного спартанский, но очень полезный.

PerfAnal - это бесплатная загрузка (GPL, первоначально являющийся примером проекта в книге Java Programming on Linux). См. Эту статью:

http://www.oracle.com/technetwork/articles/javase/perfanal-137231.html

для получения дополнительной информации и загрузки.

Обычно вы можете просто запустить

java -jar PerfAnal.jar hprof.java.txt

Вам может понадобиться скрипка с -Xmx для больших файлов hprof.