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>

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

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


person turbanoff    schedule 19.07.2016    source источник


Ответы (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/execution_sample включен, проблема заключается в JVM и сэмплере. Иначе дело скорее всего в конфигурации.

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

person Kire Haglin    schedule 20.07.2016