Работает ли FlightRecorder на профиле JavaSE 8 Embedded 8 compact2?
Я использую профиль JavaSE Embedded 8 compact 2 на встроенной платформе (например, Rasp Pi). Я выбираю компактный профиль 2, чтобы иметь как можно меньшую площадь.
В целях разработки я хочу выполнить профилирование, не меняя профиль во время выполнения (как часть ОС во флэш-памяти). JavaSE Embedded 8 включает в себя регистратор полетов для профилирования в качестве действительно крутого и полезного инструмента. Но: для этого требуется профиль FullJRE.
На странице Oracle по адресу http://www.oracle.com/technetwork/java/embedded/resources/tech/java-flight-rec-on-java-se-emb-8-2158734.html говорится:
Note that JFR is available with Java SE Embedded 8 Full JRE, not with the Compact Profiles.
Есть ли техническая возможность заставить это работать на профиле compact 2? Например, создавая настроенную версию JVM, которая включает в себя дополнения от регистратора полета? Или нужны собственные компоненты, которые есть только в виртуальных машинах FullJRE?
Обновление: тем временем я нашел сообщение от Джима Коннора с заявлением о сжатых профилях. См. https://blogs.oracle.com/jtc/entry/using_java_fligt_recorder_with. Джим подробно описывает, как запустить регистратор на компактном профиле. Поскольку регистратор полета зависит от javax.management, он считает, что работа на компактном профиле 1/2 не работает без существенных изменений.
1 ответ
Компактный профиль 2 не содержит JMX-функциональности, и большая часть реализации, например диагностические команды JFR, построена поверх MBeans в JDK 7/8. Поэтому невозможно использовать Flight Recorder на компактном 1/2.
JDK 9 уже выпущен, и единственный необходимый вам модуль - это jdk.jfr.
Вы можете создать собственный JDK, используя инструмент jlink:
cd JDK9_HOME/bin/
jlink --module-path ../jmods --add-modules jdk.jfr --output ../../jfrjdk
cd ../../jfrjdk/bin
java -XX:+UnlockCommercialFeatures -XX:StartFlightRecording -version
Если вы хотите получить доступ к JFR удаленно, то есть из Java Mission Control, используйте модуль jdk.management.jfr. Обратите внимание, что это потянет в JMX, поэтому изображение будет больше.