Как заставить Java Flight Recorder в Spring Framework писать в файл?

Ссылка скопирована
1 ответ

Добрый день.
Запускаю Flight Recorder в Spring Framework:

AnnotationConfigWebApplicationContext context= new  				AnnotationConfigWebApplicationContext(); context.register(mainPackage.MyTestAppConfig.class); context.setApplicationStartup(new FlightRecorderApplicationStartup());

AnnotationConfigWebApplicationContext context= new AnnotationConfigWebApplicationContext(); context.register(mainPackage.MyTestAppConfig.class); context.setApplicationStartup(new FlightRecorderApplicationStartup());

В параметрах JVM
-XX:StartFlightRecording:filename=recording.jfr,duration=10s,disk=true

Но по итогу файл recording.jfr пустой.
Перебровал разные флаги добавлять, всё бесполезно.

Дополнительно:

пустой или не пишет ?

когда запускается по туториалуам

docker run -it $DOCKER_IMAGE
говорит

Started recording 1. The result will be written to:  /application/leak.jfr

Started recording 1. The result will be written to: /application/leak.jfr

вот флаги

CMD ["java", "-XX:StartFlightRecording=duration=30s,settings=profile,filename=leak.jfr", "-jar", "/application/app.jar" ]

CMD ["java", "-XX:StartFlightRecording=duration=30s,settings=profile,filename=leak.jfr", "-jar", "/application/app.jar" ]

  • сергей кузьмин, я запускаю не через docker, на сервере Tomcat.

    У меня тоже пишет, что результат будет записан в файл, но ничего не записывает туда.

    при использовании команды -jar ругается

    [1.031s][info][jfr,startup] Started recording 1. The result will be written to:
    [1.031s][info][jfr,startup]
    [1.031s][info][jfr,startup] C:UsersАртёмeclipsejee-workspaceMyTestAppleak.jfr
    Error: Could not find or load main class jar
    Caused by: java.lang.ClassNotFoundException: jar

    Ваш код не работает

  • так надо чтобы программа запускалась без ошибок похоже вам в первый класс. проверка - что без флайт рекордера работает без ошибок

    как упакоывать джаву чтто не получалось исключение в рантейме Сlass not def found

  • сергей кузьмин, так у меня приложение на spring web и главный класс выглядит так

    public class MyTestApp implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext)
    {
    AnnotationConfigWebApplicationContext context= new
    AnnotationConfigWebApplicationContext();
    context.register(mainPackage.MyTestAppConfig.class);
    //context.setApplicationStartup(new FlightRecorderApplicationStartup());

    DispatcherServlet servlet = new DispatcherServlet(context);

    ServletRegistration.Dynamic registration = servletContext
    .addServlet("app", servlet);

    registration.setLoadOnStartup(1);
    registration.addMapping("/");
    }
    }

    без команды -jar все запускается

  • сделайте демо проект на гитхаб и покажите
  • кстати если приложение классический легаси томкат то надо наерное модифицировать # CATALINA_OPTS и JAVA_OPTS в catalina.sh
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Для того чтобы заставить Java Flight Recorder (JFR) в Spring Framework писать данные в файл, вам нужно настроить JFR, используя параметры командной строки при запуске вашего приложения. Ниже приведены шаги, которые необходимо выполнить для этого:

    1. Определите параметры командной строки для запуска вашего приложения Spring с включенным JFR и указанием пути к файлу, в который будут записываться данные.

    2. Добавьте следующие параметры командной строки при запуске вашего приложения:
    ```

    -XX:+UnlockCommercialFeatures
    -XX:+FlightRecorder
    -XX:StartFlightRecording=disk=true,dumponexit=true,dumponexitpath=/path/to/your/file.jfr

    -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=disk=true,dumponexit=true,dumponexitpath=/path/to/your/file.jfr

    ```

    3. Замените `/path/to/your/file.jfr` на путь к файлу, в который вы хотите записывать данные JFR.

    4. После запуска вашего приложения, JFR будет записывать данные в указанный файл. Убедитесь, что у вас есть необходимые разрешения для записи в указанный файл.

    5. Для дополнительной настройки JFR (например, указание продолжительности записи или частоты сбора событий), вы можете использовать другие параметры командной строки. Более подробную информацию о настройке JFR можно найти в документации Oracle.

    Надеюсь, что эти шаги помогут вам настроить Java Flight Recorder в Spring Framework для записи данных в файл. Если у вас остались дополнительные вопросы, не стесняйтесь задавать их.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно