Korzystanie z programu profilującego HPROF
Produkt HPROF jest programem do profilowania demonstracji dostarczanym razem z pakietem IBM® SDK, który korzysta z narzędzia JVMTI w celu gromadzenia i rejestrowania informacji na temat wykonywania języka Java™ . Za pomocą programu HPROF można pracować, które części programu używają najwięcej pamięci lub czasu procesora.
java -Xrunhprof[:<option>=<value>,...] <classname>Po uruchomieniu środowiska Java z produktem HPROF tworzony jest plik po zakończeniu działania programu. Plik ten jest umieszczany w bieżącym katalogu roboczym i jest nazywany java.hprof.txt (java.hprof , jeśli używany jest format binarny), chyba że podano inną nazwę pliku. Ten plik zawiera wiele różnych sekcji, ale dokładny format i treść zależą od wybranych opcji.
Więcej informacji na temat HPROF, które znajdują się w tej sekcji, można znaleźć pod adresem https://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html.
W komendzie java -Xrunhprof:help dostępne są następujące opcje:
- heap=dump|sites|all
- Ta opcja pomaga w analizie wykorzystania pamięci. Informuje on HPROF, aby generował dane śledzenia stosu, z którego można sprawdzić, gdzie przydzielono pamięć. Jeśli używana jest opcja heap=dump , zostanie wykonany zrzut wszystkich obiektów na żywo znajdujących się na stercie. Za pomocą komendy heap=sitesmożna uzyskać posortowaną listę ośrodków z najbardziej przydzielonym obiektem na początku. Wartość domyślna all powoduje, że oba typy danych wyjściowych są dostępne.
- cpu=samples|times|old
- Opcja cpu udostępnia informacje przydatne przy określaniu miejsca, w którym procesor spędza większość swojego czasu. Jeśli parametr cpu jest ustawiony na wartość samples, maszyna JVM wstrzymuje wykonywanie i identyfikuje, które wywołanie metody jest aktywne. Jeśli częstotliwość próbkowania jest wystarczająco wysoka, można uzyskać dobry obraz, w którym program spędza większość czasu. Jeśli parametr cpu jest ustawiony na wartość times, użytkownik otrzymuje precyzyjne pomiary dotyczące liczby wywołań każdej z metod i czasu wykonania każdego wykonania. Chociaż ta opcja jest bardziej dokładna, to spowalnia program. Jeśli parametr cpu ma wartość old, dane profilowania są tworzone w starym formacie HPROF.
- interval=y|n
- Opcja interwału ma zastosowanie tylko do cpu=samples i steruje czasem, w którym wątek próbkowania śpi między próbkami stosów wątków.
- monitor=y|n
- Opcja monitor może pomóc zrozumieć, w jaki sposób synchronizacja wpływa na wydajność aplikacji. Monitoruje implementację synchronizacji wątków. Uzyskiwanie informacji o monitorach pozwala określić, ile czasu spędzają różne wątki podczas próby uzyskania dostępu do zasobów, które są już zablokowane. HPROF daje również obraz stanu monitorów w użyciu. Informacje te są przydatne przy wykrywaniu zakleszczeń.
- format=a|b
- Wartością domyślną dla pliku wyjściowego jest format ASCII. Ustaw wartość format na 'b', jeśli chcesz określić format binarny, który jest wymagany dla niektórych programów narzędziowych, takich jak narzędzie do analizy sterty.
- file= < nazwa_pliku>
- Aby zmienić nazwę pliku wyjściowego, należy użyć opcji file . Domyślną nazwą pliku ASCII jest java.hprof.txt. Domyślną nazwą pliku binarnego jest java.hprof.
- force=y|n
- Zwykle wartość domyślna (force=y) powoduje nadpisanie wszystkich istniejących informacji w pliku wyjściowym. Jeśli więc istnieje wiele maszyn JVM działających z włączoną obsługą HPROF, należy użyć wartości force=n, która w razie potrzeby dopisuje dodatkowe znaki do nazwy pliku wyjściowego.
- net= < host>: < port>
- Aby wysłać dane wyjściowe za pośrednictwem sieci, a nie do pliku lokalnego, należy użyć opcji net .
- depth= < wielkość>
- Opcja depth wskazuje liczbę ramek metod, które mają być wyświetlane w stosie wywołań. Wartością domyślną jest 4.
- thread=y|n
- Jeśli dla opcji thread zostanie ustawiona wartość y, identyfikator wątku zostanie wydrukowany obok każdego śledzenia. Ta opcja jest przydatna, jeśli nie można zobaczyć, który wątek jest powiązany z tym, który jest śledzony. Ten typ problemu może wystąpić w aplikacji wielowątkowej.
- doe=y|n
- Domyślnym zachowaniem jest gromadzenie informacji o profilu, gdy aplikacja kończy działanie. Aby gromadzić dane profilowania podczas wykonywania, należy ustawić wartość doe (zrzut przy wyjściu) na n.
- msa=y|n
- Ta funkcja nie jest obsługiwana na platformach IBM SDK.
- cutoff= < wartość>
- Wiele przykładowych wpisów jest generowanych dla niewielkiego procentu łącznego czasu wykonania. Domyślnie program HPROF zawiera wszystkie ścieżki wykonywania, które reprezentują co najmniej 0.0001 procent czasu spędzanego przez procesor. Korzystając z tej opcji, można zwiększyć lub zmniejszyć ten punkt odcięcia. Na przykład, aby wyeliminować wszystkie pozycje, które reprezentują mniej niż jedną czwartą jednego procenta łącznego czasu wykonania, należy określić wartość cutoff=0.0025.
- werbose=y|n
- Ta opcja powoduje wygenerowanie komunikatu, gdy wykonywane są zrzuty. Wartością domyślną jest Y.
- lineno=y|n
- Każda ramka zwykle zawiera numer wiersza, który został przetworzony, ale można użyć tej opcji, aby pominąć numery wierszy z listy wyjściowej. Jeśli ta opcja jest włączona, każda ramka zawiera tekst
Unknown linezamiast numeru wiersza.TRACE 1056: java/util/Locale.toUpperCase(Locale.java:Unknown line) java/util/Locale.<init>(Locale.java:Unknown line) java/util/Locale.<clinit>(Locale.java:Unknown line) sun/io/CharacterEncoding.aliasName(CharacterEncoding.java:Unknown line)