Профиль кучи Java Mission Control

Я играю с новым профилировщиком управления полетом Java, который поставляется с Java 7u40, и я не могу распределить профиль и собрать статистику по объектам. Что бы я ни делал, я не вижу никакой статистики в окне Память -> Статистика объекта.

Следующая команда запускает сбор:

jcmd <pid> JFR.start duration=60s settings=profile filename=alloc-prof.jfr

В документации Java Mission Control не упоминаются какие-либо конкретные параметры включения объекта. профилирование. Я попытался создать свой собственный профиль и установить:

  <flag name="heap-statistics-enabled" label="Heap Statistics">true</flag>
  <flag name="allocation-profiling-enabled" label="Allocation Profiling">true</flag>

Но по-прежнему не собирается статистика объектов.


person Aleš    schedule 27.09.2013    source источник


Ответы (1)


Используйте диспетчер шаблонов, доступный в Mission Control.

Перейдите в Windows -> Диспетчер шаблонов и импортируйте шаблон, проверьте статистику кучи и профилирование распределения, экспортируйте его. Сделанный!

Если вы хотите отредактировать файл jfc вручную, полезно знать, что элементы внутри элемента управления не читаются JVM, т. е. элементы флага. Они используются JMC для изменения параметров вне элемента управления (элемент управления). один с атрибутом управления)

Ручное редактирование требует, чтобы вы изменили это:

установите для java/object_alloc_in_new_TLAB значение true

установите для java/object_alloc_outside_TLAB значение true

установите для vm/gc/detailed/object_count значение true

Обратите внимание, что есть два события подсчета объектов, с object_count_after_gc вы увеличите время GC. Если вместо этого вы выберете тот, что указан выше, вы получите один дополнительный сборщик мусора на каждый блок записи (обычно этого достаточно).

person Kire Haglin    schedule 27.09.2013
comment
Спасибо! Сначала я попробую вариант экспорта. - person Aleš; 28.09.2013
comment
@kire-haglin Спасибо за подробный ответ, очень полезно! Есть ли дополнительная документация о том, что именно делают object_count и object_count_after_gc и что означает период everyChunk? То есть оба вызывают дополнительный GC, и если да, то почему? А что такое блок записи? - person Hbf; 02.01.2016
comment
Фрагмент записи можно представить как файл журнала. При использовании period=everyChunk событие записывается при ротации файла журнала. Это гарантирует, что у вас есть по крайней мере одно такое событие для каждого файла записи (который состоит из одного или нескольких фрагментов записи). Только object_count добавляет дополнительный GC. - person Kire Haglin; 02.01.2016
comment
Это не сработало для меня. Я смог проверить статистику кучи и пытался несколько раз, но я по-прежнему не получаю количество объектов, а JMC говорит, что в этой записи счетчик объектов не включен. Есть ли что-то еще, что нужно сделать? Нужно ли запускать JVM с некоторыми параметрами? - person Jason; 30.04.2016
comment
Хорошо, я понял это. У меня это не сработало, потому что я не давал записи полета до конца установленного времени. Я поставил запись на 60 минут и остановил ее через пару минут. Поэтому я попробовал запись в течение 5 минут и позволил ей завершиться самостоятельно. Затем появилась статистика объекта. - person Jason; 30.04.2016