Программный запуск профилировщика Java HPROF «на лету»

#java #profiler #hprof

#java #профилировщик #hprof

Вопрос:

Я пытаюсь выборочно отслеживать / профилировать Java-приложение при выполнении определенных условий выполнения. Я уже могу сбрасывать кучу «на лету», используя HotSpotDiagnosticMXBean, что было весьма полезно.

Сейчас я пытаюсь сделать что-то подобное с профилированием процессора, надеясь более эффективно ориентироваться на конкретные пути кода. У меня есть некоторый опыт работы с интерфейсом командной строки HPROF и профилировщиком NetBeans, но оба они должны быть запущены заранее.

Есть ли способ программно активировать профилировщик HPROF из запущенного приложения? Предпочтительно что-то, что позволило бы мне запускать и останавливать процесс профилирования по своему желанию?

Ответ №1:

Согласно документации JVMTI, собственные библиотеки агентов, такие как hprof, должны быть загружены очень рано во время инициализации JVM, до выполнения любого байт-кода. Так что нет, это невозможно сделать «на лету».

Альтернативой может быть повторный запуск процесса Java с измененными параметрами JVM в функции main, хотя это не тривиально.

Комментарии:

1. К сожалению, это кажется правильным ответом, по крайней мере, в том, что касается HPROF… 1

2. Я не уверен, что это хороший ответ. Это зависит от того, к чему конкретно относится исходный вопрос. В приведенной документации говорится, что агент профилирования должен запускаться до того, как JVM выполнит какой-либо код … в нем не говорится, что профилирование должно начинаться до начала выполнения кода. Профилировщик может запуститься, а профилирование может начаться позже. Программный способ управления запуском профилирования был бы очень полезен. Можете ли вы сказать, что профилирование должно начинаться перед выполнением любого кода? И привести ссылку?