Отсутствующие имена процедур JAVA в Time Profiler, Instruments, OS X - PullRequest
9 голосов
/ 09 декабря 2011

Я пишу реализацию алгоритма с использованием Java. До OS X 10.7 я использовал Shark Profiler для профилирования своей реализации, которая работала довольно хорошо. Тем не менее, новые инструменты больше не находят имена процедур. Я уже пытался запустить приложение java с аргументами виртуальной машины для shark (а именно -agentlib: Shark), но они неизвестны для 10.7, и я не смог найти такой agentlib для инструментов.

Есть идеи о том, как я могу прикрепить имена процедур к именам символов (которые являются шестнадцатеричными числами) в Insturments? Я использую Eclipse Indigo, если это что-то меняет.

Спасибо!

Редактировать: Пока ничего не изменилось с OS X Mountain Lion.

Редактирование # 2: Обновление от (?) Разработчика через репортер об ошибках Apple:

dtrace в прошлом поддерживала стеки Java, хотя я, честно говоря, не могу сказать, была ли поддержана поддержка. Это может быть жизнеспособным обходным решением для того, что вы пытаетесь измерить - что в противном случае не является приоритетом для инструментов производительности на данном этапе. Возможно, вы захотите начать с сценария D в /usr/bin/cpu_profiler.d и изменить его, чтобы также собрать jstack.

Редактировать # 3: Хорошо, после еще одного обсуждения выясняется, что сам разработчик не знал, откуда взялся этот скрипт. Очевидно, что профилировщик времени в Instruments так или иначе не использует DTrace, поэтому остается только написать собственный скрипт или инструмент DTrace.

Вы правы, и я прошу прощения. Я не уверен, откуда взялся этот скрипт, и когда я внимательно посмотрел на него, в нем нет действий jstack, так что в любом случае это не то, что вам нужно. Похоже, что единственный вариант профилирования Java, который я могу вам предложить, это DTrace. У DTrace есть поставщик профилей и действие jstack, которое собирает стеки Java. Вы можете использовать «агрегаты» для определения самых тяжелых трассировок стека, и все это работает из командной строки. Документация для DTrace в основном поддерживается Sun, и я бы направил вас к любому учебному пособию по DTrace, поскольку большинство из них посвящено провайдеру профилей.

Несмотря на то, что люди говорят онлайн, Instruments не использует DTrace для всего, в частности для профилирования времени, поэтому я не могу предложить вам быстрое решение в пользовательском интерфейсе Instruments.

Ответы [ 3 ]

5 голосов
/ 29 марта 2013

Инструменты опираются на немного прекрасного программного обеспечения, разработанного Sun, под названием dtrace.У dtrace есть функция jstack (), которая должна печатать трассировку стека с помощью символов java, также есть функция ustack (), которая должна делать подобные вещи для других языков (python, node.js и т. д.).).К сожалению, версия dtrace для OS X не поддерживает эти методы и, как таковые, инструменты не будут обеспечивать эту функциональность.

Так что, к сожалению, вы не получите эту информацию от этих инструментов, пока Apple не исправит их.: (

Следуйте этой теме для получения дополнительной информации: http://www.mail-archive.com/dtrace-discuss@opensolaris.org/msg04863.html

Я подалошибка с яблоком, связанная с отсутствием поддержки трассировщиков стека помощников; если вы хотите эту функциональность, вам также следует сообщить об ошибке: https://bugreport.apple.com

0 голосов
/ 19 декабря 2012

Если вы хотите профилировать Java-приложения, я рекомендую вам использовать Visualvm из Oracle (через Java.net).Этот инструмент может профилировать память и процессор вплоть до метода, даже для удаленных JVM.В OSX это явно не часть JDK по умолчанию, но вы можете получить его здесь: http://visualvm.java.net/download.html Может быть альтернативой акуле.

0 голосов
/ 18 декабря 2012

Одна вещь, которая приходит мне в голову - это опция -g для компилятора javac, которая включает информацию об отладке.В eclise (по крайней мере, в helios) вы можете установить различные параметры для отладки данных в «Java Compiler», «Classfile Generation».Возможно, некоторые из этих настроек были повреждены.

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

Следовательно, переключение на другую (версию) VM может влиять на способность профилировщика делать правильные вещи.- Кстати, вы неявным образом «обновляли» свою версию Java (например, с 1.6 до 1.7) в процессе?

...