Java Flight Recorder не сообщает обо всех событиях GC - PullRequest
0 голосов
/ 20 октября 2018

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

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=/tmp/ImaginaryApplication/logs/flightRecorder.jfr -XX:StartFlightRecording=defaultrecording=true,settings=MyCustomSetting

Пользовательская настройка была создана с помощью пользовательского интерфейса Flight Recorder со всеми включенными настройками.Я думаю, что важный раздел, который имеет отношение к моему вопросу здесь, следующий:

  <selection name="gc-level" default="all" label="Garbage Collector">
    <option label="Off" name="off">off</option>
    <option label="Normal" name="detailed">normal</option>
    <option label="All" name="all">all</option>
  </selection>

  <condition name="gc-enabled-normal" true="true" false="false">
    <or>
      <test name="gc-level" operator="equal" value="normal"/>
      <test name="gc-level" operator="equal" value="all"/>
    </or>
  </condition>

  <condition name="gc-enabled-all" true="true" false="false">
    <test name="gc-level" operator="equal" value="all"/>
  </condition>

Запись полета была сгенерирована, когда сборка останавливается.Тем не менее, я не уверен на 100%, что он записывает все.Для начала, на странице «Память -> Сборка мусора» было сообщено только о нескольких GC.Я знаю это, потому что мы также включили флаг, чтобы записать GC в файл.Существует гораздо больше ГХ, чем то, что сообщалось в регистраторе полета.Что еще более важно, я обеспокоен тем, что в результате распределения памяти не была записана точная информация (как и события GC).В этом случае мы могли бы потратить немало усилий на настройку неправильных областей ..

Я пропустил какие-либо настройки здесь?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

По умолчанию все события сборки мусора не включены.Я имею в виду, что основные события GC присутствуют, поэтому вы можете видеть время паузы и т. Д., Но не все мелкие детали.

Самый простой способ включить все события GC - использовать Java Mission Control и мастер записи для экспорта конфигурации.Выберите «Все» в раскрывающемся списке «Сборка мусора».

Если вы не можете подключиться к JVM с помощью JMC, вы можете использовать диспетчер шаблонов Flight Recorder в JMC, расположенный в меню «Окно».Вы можете импортировать файл default.jfc, расположенный в каталоге JDK_HOME / bin / lib / jfr, продублировать его и отредактировать.Выберите «Все» для сборки мусора и экспортируйте конфигурацию в новый файл.

Затем вы можете запустить JVM с помощью:

java -XX:StartFlightRecording:settings=all-gc-events.jfc

Параметры, показанные в вашем вопросе, не читаются JVM.Они используются только JMC для применения настроек.

0 голосов
/ 20 октября 2018

Я использую settings=profile, поскольку настройки по умолчанию не записывают всю информацию о выделении.

Даже тогда он записывает только объект, который запускает новый TLAB, который по умолчанию может быть большим.Чтобы увеличить количество выборок, я уменьшаю TLAB с помощью -XX:TLABSize=128k ПРИМЕЧАНИЕ. Это может немного ухудшить производительность, поэтому я не буду использовать его, за исключением профилирования.

...