Профилирование Scala / Java для конкретных пакетов



Недавно я обнаружил, что программа, которую я написал, на удивление медленная, и в попытке исправить ее я хотел бы ее профайлить. Мои инструменты выбора до сих пор были Yourkit и hprof, но я не смог найти функциональность, которую я ищу в любом из них.



В идеале я хотел бы иметь тепловую карту в стиле Matlab Profilerдля всех моих исходных файлов, с более яркими цветами, указывающими на то, что в этой строке было потрачено больше времени. Я понимаю, что прошу слишком многого, так что если этого не будет, то меня не будет. удивленный.



Если вышеописанное невозможно, я хотел бы иметь возможность выполнить профилирование стиля hprof cpu=samples, но вместо того, чтобы выплевывать список всех методов всех классов, выполняемых в проекте, я хотел бы иметь возможность исключить пространства имен (например: java., скала.коллекция.) и имеют любое время, приписываемое этим методам, чтобы быть повторно приписанным к самому низкому уровню в стеке, где метод был вызван не в исключенном пространстве имен. Например, если у меня что-то есть например, следующее



def sillyMethod: Unit = {
0.until(1000000).map{ i =>
(0 until 1000).toSeq + 1) == ( 0 until 1000).toSeq + 2 )
}
}


Я бы предпочел знать, что все мое время проходит в силлиметоде, а не в Секе.равняется. Возможно ли это с любым доступным профилировщиком?

EDIT : в настоящее время я использую sbt для выполнения своих команд и IntelliJ IDEA для фактического редактирования.

619   2  

2 ответов:

Я очень давно не смотрел yourkit, но был бы удивлен, если бы его профилировщик не смог исключить пакеты или ограничить профилированные пакеты. На самом деле JVM поставляется с профилировщиком, который не так уж плох. visualvm входит в состав jdk. Обратите внимание, что на втором скриншоте на странице профилирования внизу есть раздел "профилировать только классы", поэтому, если вы поместите туда только свой пакет, вы не будете профилировать ничего другого, или вы можете перейти глубже к только профилю конкретные пакеты или классы.

JProfiler имеет граф вызовов, который может работать на уровне агрегации классов и пакетов.

Введите описание изображения здесь

И если вы укажете свои пакеты верхнего уровня в настройках сеанса, вы не увидите никаких внутренних компонентов классов Scala.

Введите описание изображения здесь

Отказ от ответственности: моя компания разрабатывает JProfiler

Comments

    Ничего не найдено.