Разница между подключением профилировщика jvm с использованием агента и процесса

В чем разница между подключением профилировщика jvm (в моем случае его jprofiler) с использованием библиотеки агентов jvm и динамическим подключением к процессу?

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

Предположим, что профилировщик работает локально на сервере приложений.


person Sri    schedule 08.04.2016    source источник
comment
Эта информация: docs.oracle. com/javase/8/docs/api/java/lang/instrument/ Интерфейс командной строки и запуск агентов после запуска виртуальной машины помогают каким-либо образом?   -  person Bax    schedule 09.04.2016


Ответы (2)


Как сказал Стивен, режим присоединения недоступен для Java 1.5 и ниже (присоединение было введено в Java 6), а запуск приложения можно профилировать только путем добавления параметра виртуальной машины -agentlib. Ограничение на удаленное профилирование не распространяется на JProfiler, где вы можете использовать инструмент командной строки jpenable для подготовки удаленного процесса к профилированию.

Основным недостатком режима присоединения является то, что профилировщик не видит все классы по мере их загрузки. Вместо этого для интересующих классов он должен переинструментировать эти классы. Это требует времени, и до Java 8 это обременяло PermGen, поэтому профилировщик должен быть более избирательным при инструментировании классов по сравнению с тем, когда он присутствует при запуске.

Например: Запись трассировки стека выделений массива возможна только в том случае, если вы инструментируете все сайты вызовов. В режиме присоединения это означает, что все классы должны быть переинструментированы, что нецелесообразно, поэтому в JProfiler эта функция не включена в режиме присоединения.

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

person Ingo Kegel    schedule 09.04.2016

Преимущества подключения статического (agentlib) профилировщика:

  • вы можете профилировать запуск приложения
  • вы можете профилировать приложения Java 5 и Java 6
  • вы можете профилировать приложение на удаленной JVM

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

Ссылка: Разработка приложений NetBeans с помощью среды IDE NetBeans версии 8.0, раздел 8.9 , "Подключение профилировщика"

person Stephen C    schedule 08.04.2016