Слушатель управления полетами Java?
В настоящее время у меня есть некоторый код Java, который я хотел бы профилировать. Я решил использовать Java Mission Control после прочтения некоторых многообещающих вещей об этом. Тем не менее, каждый ресурс, с которым я ознакомился до сих пор, говорит мне, что сначала нужно сначала запустить процесс, который я хочу профилировать, и только потом "прикреплять" или профилировать код из Mission Control, когда он уже запущен (например, это видео из oracle: https://youtu.be/WMEpRUgp9Y4?t=14m56s).
Есть ли способ начать процесс с профилирования с самого начала? Спасибо
3 ответа
Это не очень хорошо задокументировано, но есть возможность. Вы должны использовать эту опцию JVM
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=
Первые два являются обязательными, в то время как последний должен быть настроен с различными параметрами, которые вы можете найти здесь. Не просто понять значение каждого параметра, но с помощью проб и ошибок вы можете легко найти хороший набор параметров.
Так же, как ссылка, это минимальная функциональная конфигурация:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=6h,settings=default MyApp
Существует способ начать запись профилирования при запуске процесса.
Пример: запуск записи профилирования в течение 10 минут.
java -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=10m,name=Test,filename=recording.jfr,settings=profile -jar target/highcpu-0.0.1.jar
Смотрите мою статью для более подробной информации: Использование Java Flight Recorder
JDK 11:
-XX:StartFlightRecording
JDK 9, JDK 10:
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording
JDK 8u40,
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording=name=whatever
JDK 7u4, JDK 8u20:
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording=name=whatever
Если вы хотите избежать присоединения к процессу все вместе, вы можете указать имя файла, то есть -XX:StartFlightRecording=filename=rec.jfr, а затем либо вывести запись после периода, установив длительность, т.е. длительность =60 с, либо если вы хотите, чтобы это произошло только при выходе из JVM:
-XX:StartFlightRecording=
filename=rec.jfr,dumponexit=true
Вы можете открыть, а затем открыть файл записи в JMC. В JDK 11 это еще больше упростилось, поэтому вам нужно только указать:
-XX:StartFlightRecording:filename=c:\recs
имя файла будет сгенерировано в указанном каталоге, и оно будет автоматически выгружаться при выходе из JVM.