1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Quarkus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
TROUBLESHOOTING.md 8.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 12:42 6892020

Профилирование с 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

Профилирование запуска приложения с помощью Async Profiler

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

В этом случае лучшим инструментом является Java-агент. Он начнёт профилирование при запуске приложения, а затем запишет данные профилирования при выходе из приложения.

Вот несколько примеров использования:

Профилировать запуск CPU

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 мс).

Профилирование режима разработки приложения с помощью Async Profiler

Для профилирования режима разработки Quarkus снова необходим Java-агент. Его можно использовать так же, как для производственного приложения, за исключением того, что параметр «agentpath» необходимо установить через системное свойство «jvm.args».

Профиль запуска CPU

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?

Если вы работаете на 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Quarkus.git
git@api.gitlife.ru:oschina-mirror/mirrors-Quarkus.git
oschina-mirror
mirrors-Quarkus
mirrors-Quarkus
main