Narzędzia diagnostyczne i dane

Maszyna wirtualna J9 (VM) generuje różne typy informacji diagnostycznych do analizy. Szereg narzędzi może służyć do przetwarzania tych informacji i pomocy przy określaniu problemu.

Niektóre informacje diagnostyczne są kierowane do konkretnych obszarów środowiska wykonawczego programów Java™ . Na przykład zrzut sterty zawiera przydatne informacje na temat instancji klas i obiektów w stercie Java, podczas gdy śledzenie J9 jest ukierunkowane na bardziej ogólne problemy z VM.

Podczas określania problemu jednym z pierwszych celów jest zidentyfikowanie najbardziej prawdopodobnego obszaru, z którego pochodzi problem. Wiele problemów, które wydają się być problemem Java, pochodzą z innego miejsca. Obszary, w których mogą wystąpić problemy, obejmują:
  • Wirtualna maszyna języka Java (VM)
  • Kod rodzimy
  • Aplikacje Java
  • System operacyjny lub zasób systemowy
  • Podsystem, taki jak kod bazy danych
  • Wsparcie w obsłudze

W celu rozwiązywania problemów w poszczególnych obszarach mogą być potrzebne różne narzędzia i różne informacje diagnostyczne. Opisane tutaj narzędzia to te, które są wbudowane w maszynę wirtualną J9 lub są dostępne do użycia z maszyną VM J9 . Większość z tych narzędzi to narzędzia wieloplatformowe. Wiele innych narzędzi jest dostarczanych przez dostawców sprzętu lub oprogramowania systemowego, takich jak debuggery systemowe.

Podsumowanie informacji diagnostycznych

Działająca maszyna VM J9 obejmuje mechanizmy służące do tworzenia różnych typów danych diagnostycznych podczas różnych zdarzeń. Generalnie produkcja tych danych odbywa się w warunkach domyślnych, ale może być sterowana poprzez uruchomienie maszyny VM z konkretnymi opcjami (takimi jak: -Xdump). Starsze wersje maszyny VM sterują produkcją informacji diagnostycznych poprzez użycie zmiennych środowiskowych. Nadal można używać tych zmiennych środowiskowych, ale nie są one preferowanym mechanizmem.

Format generowanych informacji diagnostycznych jest specyficzny dla maszyny wirtualnej J9 i może być zmieniany między wersjami.

Mogą być tworzone następujące typy informacji diagnostycznych:
Plik zrzutu Java
Plik zrzutu Java jest czasem określany jako plik Javacore lub zrzut wątków w niektórych maszynach wirtualnych. Ten plik zrzutu jest w formacie czytelnym dla człowieka, który jest tworzony domyślnie, gdy maszyna wirtualna zostanie nieoczekiwanie zakończona z powodu sygnału systemu operacyjnego, wyjątku OutOfMemoryError lub zastrzeżonej kombinacji klawiszy wprowadzonej przez użytkownika. Na przykład: Ctrl-Break w systemie Windows tworzy plik zrzutu Java. Można również wygenerować plik zrzutu Java, wywołując metodę z interfejsu API zrzutu, na przykład com.ibm.jvm.Dump.JavaDump(), z poziomu aplikacji. W pliku zrzutu Java znajduje się podsumowanie stanu maszyny wirtualnej w momencie wystąpienia sygnału. Znaczna część zawartości pliku zrzutu Java jest specyficzna dla maszyny wirtualnej J9 . Szczegółowe informacje na ten temat zawiera sekcja Zrzut Java .
Plik zrzutu sterty
Maszyna wirtualna może wygenerować plik zrzutu sterty na żądanie użytkownika, wywołując komendę com.ibm.jvm.Dump.HeapDump() z poziomu aplikacji lub domyślnie, gdy maszyna wirtualna kończy się z powodu wyjątku OutOfMemoryError . Istnieje możliwość określenia bardziej precyzyjnej kontroli czasu tworzenia pliku zrzutu sterty za pomocą opcji -Xdump:heap . Na przykład, można zażądać pliku zrzutu sterty po wystąpieniu pewnej liczby pełnych operacji czyszczenia pamięci. Domyślny format Heapdump (pliki phd) nie jest czytelny dla człowieka i musi być przetwarzany za pomocą dostępnych narzędzi, takich jak Memory Analyzer. Więcej informacji na ten temat zawiera sekcja Using Heapdump .
Plik zrzutu systemowego
Pliki zrzutu systemowego są plikami specyficznymi dla platformy, które zawierają informacje na temat aktywnych procesów, wątków i pamięci systemowej. Te pliki są również nazywane zrzutami podstawowymi na platformach Linux® . Pliki zrzutu systemowego są zwykle duże. Domyślnie pliki zrzutu systemowego są tworzone przez maszynę wirtualną tylko wtedy, gdy maszyna wirtualna ulegnie nieoczekiwanej awarii z powodu błędu GPF (general protection fault) lub poważnej maszyny VM lub błędu systemowego. Można również zażądać pliku zrzutu systemowego za pomocą funkcji API Dump. Na przykład można wywołać metodę com.ibm.jvm.Dump.SystemDump() z poziomu aplikacji. Można użyć opcji -Xdump:system , aby utworzyć pliki zrzutu systemowego, gdy wystąpią inne zdarzenia.
Plik zrzutu JIT
Gdy wystąpi zdarzenie błędu ogólnego (GPF) lub przerwania, kompilator JIT (Just-In-Time) generuje mały plik binarny danych diagnostycznych, który może pomóc w rozwiązywaniu problemów. Więcej informacji na temat położenia tego pliku znajduje się w sekcji Położenie pliku.
Dane czyszczenia pamięci
Maszyna wirtualna uruchomiona z opcją -verbose:gc generuje dane wyjściowe w formacie XML, które mogą być używane do analizowania problemów w programie Garbage Collector lub problemów związanych z projektowaniem aplikacji użytkownika. Wiele innych opcji ma wpływ na rodzaj i ilość informacji diagnostycznych Garbage Collector. Więcej informacji na ten temat zawiera sekcja Dane diagnostyczne programu Garbage Collector.
Dane śledzenia
Śledzenie J9 umożliwia rejestrowanie punktów wykonywania w kodzie Java oraz wewnętrznym kodzie maszyny wirtualnej. Opcja -Xtrace umożliwia sterowanie liczbą i obszarami punktów śledzenia, a także wielkością i charakterem obsługiwanych buforów śledzenia. Wewnętrzne bufory śledzenia w czasie awarii są również dostępne w pliku zrzutu systemowego, a narzędzia są dostępne do wyodrębnienia ich z pliku. Zazwyczaj dane śledzenia są zapisywane do pliku w zakodowanym formacie, a następnie formater śledzenia przekształca dane w czytelny format. Jeśli jednak mają być generowane małe ilości danych śledzenia, a wydajność nie jest problemem, śledzenie może być kierowane do STDERR i będzie wstępnie sformatowane. Więcej informacji na ten temat zawiera sekcja Śledzenie aplikacji Java.
Inne dane
Dostępne są specjalne opcje służące do tworzenia informacji diagnostycznych dotyczących następujących komponentów J9 :

Podsumowanie narzędzi wieloplatformowych

Następujące narzędzia wieloplatformowe mogą być używane do diagnozowania problemów:
Narzędzia IBM® Monitoring and Diagnostic Tools
Narzędzia IBM Monitoring and Diagnostic Tools to zestaw narzędzi opartych na interfejsie GUI do monitorowania aplikacji i analizowania danych diagnostycznych. Narzędzia te są przeznaczone do wykonywania zadań diagnostycznych tak szybko i jak najłatwiej. Więcej informacji na temat narzędzi zawiera dokumentacja IBM Monitoring and Diagnostic tools (Narzędzia do monitorowania i diagnostyki produktu IBM).
Przeglądarka zrzutów między platformami
Przeglądarka zrzutu systemowego ( jdmpview) korzysta z plików zrzutu generowanych przez system operacyjny w celu rozwiązania danych istotnych dla maszyny wirtualnej J9 . Przeglądarka zrzutu rozpoznaje maszynę wirtualną i może być używana do analizowania jej internałów. Jest to przydatne narzędzie do debugowania nieoczekiwanych terminacji maszyny wirtualnej. Ponieważ przeglądarka zrzutu jest platformą międzyplatformową, można przeprowadzić analizę zrzutu z dowolnego systemu i bez znajomości debugera systemu. Więcej informacji na ten temat zawiera sekcja Przeglądarka zrzutu.
Narzędzia JVMTI
Interfejs JVM (JVM Tool Interface-JVMTI) jest interfejsem programowym do użycia przez narzędzia, zastępując interfejs JVMPI (Java Virtual Machine Profiler Interface) oraz interfejs JVMDI (Java Virtual Machine Debug Interface). Informacje na temat interfejsu JVMTI zawiera sekcja Java Virtual Machine Tool Interface(Interfejs narzędzia wirtualnej maszyny języka Java).
Narzędzia JPDA
Architektura JPDA (Java Platform Debugowanie Architecture) jest powszechnym standardem debugowania wirtualnej maszyny języka Java. J9 jest w pełni kompatybilny z JPDA. Do maszyny wirtualnej J9 można przyłączyć dowolny debuger JPDA. Ponieważ są one debugerami, narzędzia JPDA najlepiej nadają się do śledzenia problemów aplikacji, które mają powtarzalne warunki, takie jak przecieki pamięci w aplikacjach lub zawieszki. Przykładem narzędzia JPDA jest debuger, który jest dostarczany razem z produktem Eclipse for Java.
DTFJ
Diagnostic Tool Framework for Java (DTFJ) to aplikacyjny interfejs programistyczny (API) języka Java, który jest używany do obsługi budowania narzędzi diagnostycznych Java. DTFJ może sprawdzić plik zrzutu systemowego w celu przeanalizowania wewnętrznej struktury wirtualnej maszyny języka Java. DTFJ jest zaimplementowany w czystym kodzie Java, a narzędzia napisane przy użyciu DTFJ mogą być międzyplatformowe. W związku z tym możliwe jest przeanalizowanie pliku zrzutu pobranego z jednego komputera na innym, zdalnym i wygodniejszym, maszynowym. Na przykład plik zrzutu utworzony na komputerze z systemem z/OS® może być analizowany na komputerze Thinkpad z systemem Windows. Więcej informacji na ten temat zawiera sekcja Korzystanie z środowiska narzędzia diagnostycznego dla języka Java.
Formatowanie śledzenia
Śledzenie jest kluczowym narzędziem diagnostycznym. Maszyna VM J9 charakteryzuje się dużą elastycznością w określaniu, co jest śledzone i kiedy jest śledzona. Ta elastyczność umożliwia dostosowanie śledzenia tak, aby miało stosunkowo niewielki wpływ na wydajność. Maszyna wirtualna J9 zawiera również wiele osadzonych punktów śledzenia. W tej wersji funkcja śledzenia maximal jest domyślnie włączona dla kilku punktów śledzenia poziomu 1 i punktów śledzenia wyjątków. Opcje wiersza komend umożliwiają ustawienie dokładnie tego, co ma być śledzone, a także określenie miejsca, w którym ma być śledzony wynik śledzenia. Dane wyjściowe śledzenia są zwykle w zakodowanym formacie i wymagają pomyślnego wyświetlenia formatera śledzenia.
Oprócz osadzonych punktów śledzenia udostępnionych w kodzie maszyny wirtualnej, można umieścić własne punkty śledzenia aplikacji w kodzie Java. Śledzenie pozycji i wyjścia można aktywować dla wszystkich metod we wszystkich klasach. Alternatywnie można aktywować śledzenie dla wyboru metod w wyborze klas. Śledzenie aplikacji i metod jest przeplatanych w buforach śledzenia z osadzonymi punktami śledzenia maszyny wirtualnej. Śledzenie umożliwia szczegółową analizę tras przekreślonych przez kod. Śledzenie jest używane głównie do określania problemów z wydajnością i przeciekami. Dane śledzenia mogą również zawierać wskazówki dotyczące stanu maszyny wirtualnej przed nieoczekiwanym zakończeniem lub zawieszeniu. Dane śledzenia i formatowania śledzenia są specyficzne dla maszyny wirtualnej J9 . Więcej informacji na ten temat zawiera sekcja Śledzenie aplikacji Java . Chociaż śledzenie nie jest łatwe do zrozumienia, to jest skuteczne narzędzie.