Co to jest format pliku HPROF?
Pliki z rozszerzeniem .hprof przechowują zrzuty pamięci stosu (heap dumps) dla programów działających na Java Virtual Machine (JVM). Pliki .hprof są generowane przez agenta profilującego HPROF wbudowanego w JDK. Format jest binarny i może osiągać bardzo duże rozmiary - nawet kilka GB - proporcjonalnie do rozmiaru stosu JVM w momencie przechwytywania. Jako artefakt diagnostyczny, plik .hprof można bezpiecznie usunąć bez wpływu na wydajność aplikacji.
Generowanie plików .hprof. Pliki .hprof są zazwyczaj generowane podczas błędów pamięci Java. Najczęstszym wyzwalaczem jest OutOfMemoryError: dodanie flagi JVM -XX:+HeapDumpOnOutOfMemoryError powoduje, że środowisko wykonawcze automatycznie zapisuje zrzut w przypadku awarii. Zrzuty można również tworzyć na żądanie za pomocą jmap -dump:format=b,file=heap.hprof <pid> lub jcmd <pid> GC.heap_dump. Pliki zrzutu pamięci mogą być również tworzone automatycznie po nagłym zakończeniu pracy JVM. Urządzenia z systemem Android również generują pliki .hprof, ale w nieco innym formacie wewnętrznym, który wymaga konwersji za pomocą hprof-conv, zanim standardowe narzędzia Java będą mogły je odczytać.
Analiza plików .hprof - problemy z pamięcią aplikacji. Pliki .hprof mogą być analizowane za pomocą Eclipse Memory Analyzer Tool (MAT), otwartoźródłowej aplikacji GUI hostowanej przez Eclipse Foundation. MAT może importować pliki .hprof i analizować je pod kątem błędów OOM (Out of Memory), identyfikować wycieki pamięci i pomagać w optymalizacji zużycia pamięci przez aplikację. VisualVM, dołączony do JDK, to kolejny szeroko stosowany analizator. W przypadku profilowania na poziomie produkcyjnym, od wersji JDK 11 preferowanym podejściem jest JFR (Java Flight Recorder); zrzuty stosu HPROF pozostają jednak standardowym narzędziem do analizy wycieków pamięci.
Bezpieczeństwo
RYZYKO: MEDIUMPliki HPROF mogą zawierać wrażliwe dane: hasła, klucze prywatne, tokeny API lub informacje osobiste, które znajdowały się w pamięci stosu JVM w momencie zrzutu. Zrzuty stosu należy traktować jako poufne; nie należy przesyłać zrzutów produkcyjnych do serwisów analizy online bez wcześniejszego sprawdzenia lub anonimizacji zawartości. Pliki nie są wykonywalne i nie stwarzają ryzyka wykonania kodu.
Szczegóły formatu
w pigułce- Android ART Heap Dump - Android Runtime generuje pliki .hprof w formacie kompatybilnym, ale nie identycznym; przekonwertuj za pomocą hprof-conv (Android SDK) przed otwarciem w MAT/VisualVM.
Programy otwierające pliki HPROF
Szczegóły techniczne
specyfikacja| Kodowanie | Binarne (główne); obsługiwana również starsza opcja tekstowa ASCII |
| Kolejność bajtów | Big-endian |
| Kontener | Sekwencyjny format rekordów binarnych HPROF |
| Magiczny ciąg | „JAVA PROFILE 1.0.1” lub „JAVA PROFILE 1.0.2” (zakończony zerem na offset 0) |
| Wersja formatu 1.0.1 | JDK 1.2-5; obsługuje stosy do 2 GB |
| Wersja formatu 1.0.2 | JDK 6+; dodaje tag HEAP DUMP SEGMENT (0x1C) dla stosów powyżej 2 GB |
| Typowy rozmiar pliku | 50 MB - 20 GB (proporcjonalnie do stosu JVM w momencie zrzutu) |
| Struktura rekordu | 1-bajtowy tag + 4-bajtowy offset znacznika czasu + 4-bajtowa długość treści + zmienna treść |
| Kluczowe tagi | HEAP DUMP (0x0C), HEAP DUMP SEGMENT (0x1C), ciągi UTF8, rekordy LOAD CLASS |
| Android HPROF | Używa rozszerzenia .hprof, ale ma nieco inny format; wymaga hprof-conv przed analizą |
| Główny wyzwalacz | Flaga JVM -XX:+HeapDumpOnOutOfMemoryError; także jmap i jcmd na żądanie |
| Wydano | Java 1.2 (1998); binary format stabilised with JDK 1.6 |
| Najnowsza wersja | HPROF binary format 1.0.2 (JDK 6+) |
| Specyfikacja | docs.oracle.com |
Konwersje HPROF
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki HPROF.