JMC не показывает горячие методы и пакеты

Я пытаюсь найти проблемные методы в моей серверной программе с JMC. Когда я запускаю сервер локально (в Windows) и запускаю Flight Recorder из JMC - все работает нормально. JMC правильно показывает данные в Code вкладка: Горячие методы, Дерево вызовов и т. д. Но когда я пытался профилировать сервер на удаленной платформе (в Linux), я получал пустое окно. Для запуска JFR на платформе я использую это:

/opt/java/java8/bin/jcmd 38390 VM.unlock_commercial_features
/opt/java/java8/bin/jcmd 38390 JFR.start duration=10m compress=true filename=dxstress3_cross_try1.jfr settings=/opt/dxstress/settings_for_jmc.jfc

Я использую файл настроек Oracle JDK 8u40 settings_for_jmc.jfc Я экспортировал из JMC. Содержит настройки execute_sample

<event path="vm/prof/execution_sample">
  <setting name="enabled">true</setting>
  <setting name="period">10 ms</setting>
</event>

Пустое окно горячих методов

Есть вариант записи или нет таких данных? Что я упустил?

1 ответ

Работает ли, если вы не указали пользовательский файл настроек?

Если это так, проблема, скорее всего, в вашем.jfc-файле. Это должно выглядеть так на JDK 7/8

 <event path="vm/prof/execution_sample"> 
   <setting name="enabled" control="method-sampling-enabled">true</setting>
   <setting name="period" control="method-sampling-interval">10 ms</setting>
 </event>

Если нет, это может быть ошибкой. Возникла проблема с семафорами, не использующими CLOCK_REALTIME в Linux, что могло резко сократить количество выборок. Это было исправлено в 7u80 и 8u25.

Чтобы распечатать текущие настройки событий, выполните:

jcmd <pid> JFR.check verbose=true

Если включен vm / prof / execute_sample, проблема заключается в JVM и сэмплере. В противном случае, это наиболее вероятно в конфигурации.

Сэмплер создает события только в том случае, если метод сэмплирования выполняет код Java, поэтому, если ваше приложение вращается в native, сэмплов не будет.

Другие вопросы по тегам