Задать вопрос
@artemfisher

Почему Java Flight Recorder в Spring Boot не пишет в файл?

Включаю Java Flight Recorder:

@SpringBootApplication
public class AppInitializer {
	
	public static void main(String[] args)
	{		
		var context = new SpringApplicationBuilder(AppInitializer.class)
		.child(WebConfig.class)		
		.initializers(ConditionEvaluationReportLoggingListener.forLogLevel(LogLevel.DEBUG))		
		.web(WebApplicationType.SERVLET)
		.applicationStartup(new FlightRecorderApplicationStartup())			
		.run(args);			
	}
}


Архивирую в jar и запускаю приложение разными командами:
java -XX:StartFlightRecording:filename=recording.jfr,duration=10s,settings=profile,dumponexit=true -jar DatingSpringBoot.jar --myparam=val

java -XX:StartFlightRecording:filename=recording.jfr,duration=10s,settings=profile -jar DatingSpringBoot.jar --myparam=val


В обоих случаях пишет, что запись началась:
[1.327s][info][jfr,startup] Started recording 1. The result will be written to:
[1.327s][info][jfr,startup]
[1.327s][info][jfr,startup] C:\Users\Артём\git\DatingSpringBoot\DatingSpringBoot\target\recording.jfr
[5.316s][warning][os ] Unable to resolve PDH index: (230)
[5.318s][warning][os ] Please check the registry if this performance object/counter is disabled
[6.617s][warning][os ] Unable to resolve PDH index: (230)
[6.618s][warning][os ] Please check the registry if this performance object/counter is disabled


В итоге файл создается, но он пустой. Даже после принудительного завершения работы приложения (Ctrl + C).
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Академия Eduson
    Java-разработчик
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
avleonov97
@avleonov97
Java разработчик
Здравствуйте!

Имею значительный опыт работы с Java Flight Recorder и сталкивался с различными ошибками при его использовании. Хочу отметить, что JFR весьма чувствителен к версиям Java и их поставщикам. В настоящее время существует множество кастомных сборок JDK, которые могут содержать изменения, влияющие на работу профилировщика.

Возможно, проблема связана с используемой версией Java. К сожалению, вы не указали вашу версию JDK, что затрудняет точную диагностику.

Также хочу обратить внимание на параметры запуска. Вы указали duration=10s — это время записи метрик, однако я не уверен, что ваше приложение успевает полностью запуститься за этот промежуток. Вполне вероятно, что JFR не успевает произвести запись из-за недостаточного времени.

Рекомендую начать с минимальной конфигурации и постепенно добавлять параметры:

-XX:StartFlightRecording=settings=default,name=alex


После успешного запуска можно последовательно добавлять другие параметры, сверяясь с официальной документацией:
https://docs.oracle.com/en/java/javase/11/docs/api...

Такой подход поможет точно определить, какой именно параметр вызывает проблему.

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

Буду благодарен, если дадите обратную связь по итогу. Спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы