Профилирование с Async Profiler
/path/to/async-profiler/profiler.sh stop -f /tmp/cpu-profile.html
Эта команда создаст HTML-график пламени (Async Profiler автоматически определяет, что вы запрашиваете график пламени благодаря расширению файла «html»), который можно открыть в браузере (и даже увеличить масштаб внутри него, щёлкнув по фрейму).
Очень полезная опция — это «-s» (или «--simple»), которая приводит к использованию простых имён классов вместо полностью определённых имён, делая график пламени более читаемым (за счёт того, что не отображаются имена пакетов классов). Вы также можете ограничить продолжительность профилирования, используя «-d» (или «--duration»), за которой следует продолжительность в секундах. Если вы используете опцию «--duration», выходной файл будет создан автоматически в конце периода длительности. Вам не нужно явно запускать и останавливать профилировщик.
Чтобы начать профилирование распределения ресурсов, выполните следующую команду:
/path/to/async-profiler/profiler.sh start -b 4000000 -e alloc
«-e» (или «--event») позволяет указать тип события для профилирования. По умолчанию тип профиля — CPU, но в этом случае, поскольку нас интересует профилирование распределения, мы указываем «alloc» в качестве значения «-e».
Остановка профилирования распределения выполняется так же, как и для ранее показанного профилирования CPU.
/path/to/async-profiler/profiler.sh stop -f /tmp/alloc-profile.html
Когда вы хотите профилировать запуск приложения, вы не можете использовать инструмент командной строки, так как вам нужен способ запустить профилировщик вместе с вашим приложением.
В этом случае лучшим инструментом является Java-агент. Он начнёт профилирование при запуске приложения, а затем запишет данные профилирования при выходе из приложения.
Вот несколько примеров использования:
java -agentpath:/path/to/async-profiler/build/libasyncProfiler.so=start,event=cpu,file=startup-cpu-profile.html,interval=1000000,simple
-jar my-application.jar
java -agentpath:/path/to/async-profiler/build/libasyncProfiler.so=start,event=alloc,file=/tmp/startup-alloc-profile.html,interval=1000000,simple
-jar my-application.jar
Обратите внимание, что короткие опции не поддерживаются внутри агента, вам нужно использовать их длинные версии.
По умолчанию Async Profiler выбирает события каждые 10 мс. Когда дело доходит до профилирования/отладки проблемы запуска Quarkus, это значение часто слишком велико, поскольку Quarkus запускается очень быстро. По этой причине нередко настраивают интервал профилирования на 1 000 000 нс (то есть 1 мс).
Для профилирования режима разработки Quarkus снова необходим Java-агент. Его можно использовать так же, как для производственного приложения, за исключением того, что параметр «agentpath» необходимо установить через системное свойство «jvm.args».
mvn quarkus:dev -Djvm.args="-agentpath:/path/to/async-profiler/build/libasyncProfiler.so=start,event=cpu,file=startup-cpu-profile.html,interval=1000000,simple"
mvn quarkus:dev -Djvm.vm.args="-agentpath:/path/to/async-profiler/build/libasyncProfiler.so=start,event=alloc,file=/tmp/startup-alloc-profile.html,interval=1000000,simple"
Вы также можете настроить системное свойство jvm.args непосредственно внутри раздела quarkus-maven-plugin вашего pom.xml.
При попытке отладить производительность запуска удобно регистрировать время выполнения шагов сборки. Это можно сделать, добавив следующее системное свойство: -Dquarkus.debug.print-startup-times=true в режиме разработки или при запуске JAR.
Также доступна красивая визуализация шагов сборки в пользовательском интерфейсе Dev, расположенном здесь: http://localhost:8080/q/dev/build-steps.
Если вы хотите иметь такую же визуализацию обработки шагов сборки при сборке приложения, вы можете использовать свойство quarkus.debug.dump-build-metrics=true. Например, использование mvn package -Dquarkus.debug.dump-build-metrics=true приведёт к созданию build-metrics.json в вашем целевом репозитории. То, что вы можете обработать с помощью приложения quarkus-build-report, доступного здесь https://github.com/mkouba/quarkus-build-report. Это приложение создаст файл report.html, который вы сможете открыть в браузере.
Если вы работаете на Windows, вы всё равно можете получить полезную информацию о производительности, используя JFR — Java Flight Recorder. Следующие параметры Java позволят JFR записывать данные профилирования в файл myrecording.jfr, который затем можно использовать для анализа в JMC — Java Mission Control.
-XX:StartFlightRecording=filename=myrecording.jfr,settings=profile -XX:FlightRecorderOptions=stackdepth=64
Здесь мы настраиваем JFR с более глубокой глубиной стека, так как обычно по умолчанию её недостаточно.
Если у вас есть проблемы с производительностью нативных сборок вашего приложения, сначала убедитесь, что эти проблемы проявляются только в нативном режиме. В таком случае обратитесь к справочному руководству по нативным приложениям и, в частности, к разделу профилирование.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )