JAVA → VisualVM: мониторинг и диагностика Java-приложений — теперь с sampling-профайлером
В прошлой статье я писал:
Так вот, сегодня выпущена VisualVM 1.2, где реализован наконец и семплирующий профайлер. Он оформлен в виде плагина, который можно автоматически установить через Tools->Plugins->VisualVM-Sampler.
Вообще в природе существуют два вида performance-профайлеров: инструментирующие и семплирующие. Первые переписывают код приложения, добавляя в него вызовы в профайлер, типа «зарегистрирован вход в метод такой-то». Вторые через некоторые промежутки времени собирают срезы текущего состояния машины (например, thread stack'и) и, пользуясь законом больших чисел, судят о том, где приложение проводит больше времени.
Инструментирующие профайлеры имеют достаточно большие накладные расходы, но зато дают самые аккуратные результаты. Работа такого профайлера сильно искажает работу приложения, но накладные расходы в теории равномерно размазываются по всем методам. Семплирующие профайлеры имеют практически нулевые накладные расходы, но зато требуют бОльшего времени накопления результатов.
Как я уже писал выше, в VisualVM сейчас реализованы инструментирующие профайлеры, в то время как в YourKit реализованы семплирующие. В VisualVM можно ограничить набор классов, подлежащих инструментации, таким образом снизив накладные расходы. Для Memory-профайлера можно увеличить количество объектов, подлежащих учёту. В настоящее время в VisualVM ведутся разработки как раз семплирующего профайлера.
Так вот, сегодня выпущена VisualVM 1.2, где реализован наконец и семплирующий профайлер. Он оформлен в виде плагина, который можно автоматически установить через Tools->Plugins->VisualVM-Sampler.
JAVA → VisualVM: мониторинг, профилировка и диагностика Java-приложений
Тихо и незаметно закончилсь на прошлой неделе крупнейшая конференция Java-разработчиков JavaOne 2009, и по сети начали распространяться некоторые слайды. Я, волею судеб, оказался специалистом по производительности Java SE, и бОльшую часть времени работал в павильоне на стенде «Java SE Platform: Performance, Java HotSpot VM Internals, and Diagnostics». Подавляющее большинство вопросов, заданных мне, сводилось к нескольким:
Добрых три-четыре десятка раз я отвечал одно и то же, и каждый раз удивлялся, что мои собеседники не владеют, как мне казалось, элементарным набором инструментов. Поэтому хочу зафиксировать это знание здесь, чтобы впредь не повторяться :)
- Как узнать «горячие места» в коде?
- Как узнать, сколько занимает и что делает GC?
- Как узнать, что происходит с памятью и где она «течёт»?
Добрых три-четыре десятка раз я отвечал одно и то же, и каждый раз удивлялся, что мои собеседники не владеют, как мне казалось, элементарным набором инструментов. Поэтому хочу зафиксировать это знание здесь, чтобы впредь не повторяться :)