2016-07-19 6 views
0

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

/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 Я экспортируемые из СВК. Он содержит execution_sample настройки

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

Empty hot methods window

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

ответ

0

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

Если это так, то проблема наиболее вероятна в вашем файле .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 

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

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