Парсер JMC для дампов Java JFR с использованием Jrockit

Я узнал, что синтаксический анализ JFR в Java может выполняться неподдерживаемыми синтаксическими анализаторами, такими как синтаксический анализатор JMC, с использованием jrockit из this. Также я подумал, что во время записи полета будет зафиксировано много событий.

Если я хочу получить значения данных из различных событий, таких как трассировка стека на вкладке «События», горячий метод на вкладке «Код», дерево вызовов на вкладке «Код» и т. Д. Как мне отфильтровать? Пример изображения

например, я смог отфильтровать дерево вызовов, используя следующий код, как указано в jfr-flame-graph.

final String EVENT_TYPE = "Method Profiling Sample";
IView view = recording.createView();
for(IEvent event : view){
if(EVENT_TYPE.equals(event.getEventType().getName())){
  FLRStackTrace flrStackTrace = (FLRStackTrace) event.getValue("(stackTrace)");

Здесь Тип события - Образец профилирования метода; Идентификатор - (трассировка стека);

Итак, если я хочу получить трассировку стека / горячие методы / и т. Д., Какие события / идентификаторы мне нужно захватить? Есть ли для этого какие-то документы?


person Vithulan    schedule 19.05.2016    source источник
comment
Для этого нет документации.   -  person Klara    schedule 20.05.2016


Ответы (2)


Для этого нет документации. Если вы хотите извлечь трассировки стека, jfr-flame-graph является очень хорошим примером. Разница между трассировкой событий / стека и кода / горячих методов заключается только в том, что на вкладке «Горячие методы» используется только событие «Образец профилирования метода», вкладки «События» являются более общими и будут отображать типы событий, выбранные вами в представлении «Типы событий». Дерево кодов / вызовов такое же, как и у горячих методов, но «в перевернутом виде».

Чтобы увидеть, какие другие события доступны, вы можете использовать пользовательский интерфейс JMC. Там есть функция, называемая представлением дизайнера (щелкните Окно / Показать представление / Дизайнер). Если у вас открыта запись, вы можете использовать красную кнопку остановки, чтобы перейти в режим разработки интересующей вас вкладки, а затем щелкнуть правой кнопкой мыши интересующий компонент, чтобы увидеть, какие типы событий и атрибуты он использует.

person Klara    schedule 20.05.2016
comment
Спасибо Кларе, я смог получить данные из этих полей с помощью вашего трюка и отладки кода. - person Vithulan; 20.05.2016

JDK 9 имеет поддерживаемый API парсера.

Path p = Paths.get("recording.jfr");
for (RecordedEvent event: RecordingFile.readAllEvents(p)) {
  System.out.println(event);
}

Более полный пример см. В документации Javadoc http://docs.oracle.com/javase/9/docs/api/jdk/jfr/consumer/package-summary.html

person Kire Haglin    schedule 30.09.2017