2013-09-27 12 views
9

gram z nowy Java Profiler Kontroli Misji, który nadchodzi z Java 7u40 i nie mogę dokonać alokacji go profil i zbierać statystyki obiektów. Niezależnie od tego, co robię, nie widzę żadnych statystyk w oknie Pamięć ->Statystyki obiektu.Java Mission Control Heap profilu

Poniższa komenda rozpoczyna kolekcji:

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

Java Mission Control documentation nie wspomina o żadnych konkretnych opcji, aby umożliwić obiektów profilowania. Próbowałem utworzyć własny profil i ustawić:

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

Ale nadal nie zbierane są statystyki obiektu.

Odpowiedz

10

Użyj menedżera szablonów, który jest dostępny w opcji Kontrola misji.

Przejdź do systemu Windows -> Menedżer szablonów i zaimportuj szablon, a następnie sprawdź statystyki sterty i profilowanie alokacji, wyeksportuj go. Gotowe!

Jeśli chcesz edytować plik jfc ręcznie, dobrze jest wiedzieć, że elementy wewnątrz elementu sterującego nie są odczytywane przez JVM, tj. Element flag, Są one używane przez JMC do modyfikowania parametrów poza element sterujący (jeden z atrybutem sterowania)

ręczna edycja wymaga modyfikacji tych:

zestaw java/object_alloc_in_new_TLAB włączona true

zestaw java/object_alloc_outside_TLAB włączona do prawdziwego

set vm/gc/detailed/object_count enabled to true

Uwaga, istnieją dwa zdarzenia liczenia przedmiotów, z object_count_after_gc zwiększą GC razy. Jeśli wybierzesz jeden z powyższych, otrzymasz jeden dodatkowy GC za porcję nagrania (co zwykle wystarcza).

+1

Dzięki! Spróbuję najpierw opcji eksportu. –

+0

@ kire-haglin Dzięki za szczegółową odpowiedź, bardzo pomocne! Czy istnieje więcej dokumentacji na temat tego, czym dokładnie są 'object_count' i' object_count_after_gc' oraz co oznacza okres 'everyChunk'? Tj. Czy oba powodują _dodatkową_ GC, a jeśli tak, dlaczego? A czym jest "kawałek nagrywający"? – Hbf

+1

Możesz myśleć o kawałku nagrania jako pliku dziennika. Przy _period = "everyChunk" _ zdarzenie jest zapisywane, gdy "plik logu" jest obrócony. To gwarantuje, że masz co najmniej jedno takie zdarzenie na plik nagrania (który składa się z jednego lub kilku kawałków nagrywających). Tylko _object_count_ dodaje dodatkowy GC. –