Что такое формат файла HPROF?
Файлы с расширением .hprof содержат дампы памяти кучи (heap dumps) для программ, работающих на Java Virtual Machine (JVM). Файлы .hprof генерируются агентом профилирования HPROF, встроенным в JDK. Формат является бинарным и может достигать очень больших размеров - даже нескольких ГБ - пропорционально размеру кучи JVM в момент создания снимка. Как диагностический артефакт, файл .hprof можно безопасно удалить, это не повлияет на производительность приложения.
Генерация файлов .hprof. Файлы .hprof обычно создаются при ошибках памяти Java. Самый распространенный триггер - это OutOfMemoryError: добавление флага JVM -XX:+HeapDumpOnOutOfMemoryError заставляет среду выполнения автоматически записывать дамп при сбое. Дампы также можно создать по запросу с помощью jmap -dump:format=b,file=heap.hprof <pid> или jcmd <pid> GC.heap_dump. Файлы дампов памяти также могут создаваться автоматически при внезапном завершении работы JVM. Устройства Android также создают файлы .hprof, но в немного другом внутреннем формате, который требует конвертации с помощью hprof-conv, прежде чем стандартные инструменты Java смогут их прочитать.
Анализ файлов .hprof - проблемы с памятью приложений. Файлы .hprof можно анализировать с помощью Eclipse Memory Analyzer Tool (MAT), приложения с открытым исходным кодом от Eclipse Foundation. MAT может импортировать файлы .hprof и анализировать их на наличие ошибок OOM (Out of Memory), выявлять утечки памяти и помогать оптимизировать использование памяти приложением. VisualVM, входящий в состав JDK, является еще одним широко используемым анализатором. Для профилирования на уровне продакшена, начиная с JDK 11 и выше, предпочтительным подходом является JFR (Java Flight Recorder); однако дампы кучи HPROF остаются стандартным инструментом для анализа утечек памяти.
Безопасность и защита
РИСК: MEDIUMФайлы HPROF могут содержать конфиденциальные данные: пароли, закрытые ключи, токены API или личную информацию, которая находилась в памяти кучи JVM в момент создания дампа. Относитесь к дампам кучи как к конфиденциальным; не загружайте дампы с рабочих серверов в онлайн-сервисы анализа без предварительной проверки или анонимизации содержимого. Файлы не являются исполняемыми и не несут риска выполнения кода.
Детали формата
в двух словах- Дамп кучи Android ART - Android Runtime генерирует файлы .hprof с совместимым, но не идентичным форматом; конвертируйте с помощью hprof-conv (Android SDK) перед открытием в MAT/VisualVM.
Программы, открывающие файлы HPROF
Технические подробности
глубокая спецификация| Кодировка | Бинарная (основная); также поддерживается устаревший вариант в текстовом формате ASCII |
| Порядок байтов | Big-endian |
| Контейнер | Последовательный формат бинарных записей HPROF |
| Магическая строка | «JAVA PROFILE 1.0.1» или «JAVA PROFILE 1.0.2» (с нулевым завершением по смещению 0) |
| Версия формата 1.0.1 | JDK 1.2-5; поддерживает кучи до 2 ГБ |
| Версия формата 1.0.2 | JDK 6+; добавлен тег HEAP DUMP SEGMENT (0x1C) для куч более 2 ГБ |
| Типичный размер файла | 50 МБ - 20 ГБ (пропорционально куче JVM в момент дампа) |
| Структура записи | 1-байтовый тег + 4-байтовое смещение метки времени + 4-байтовая длина тела + тело переменной длины |
| Ключевые теги | HEAP DUMP (0x0C), HEAP DUMP SEGMENT (0x1C), строки UTF8, записи LOAD CLASS |
| Android HPROF | Использует расширение .hprof, но немного другой формат; требует hprof-conv перед анализом |
| Основной триггер | Флаг JVM -XX:+HeapDumpOnOutOfMemoryError; также jmap и jcmd по запросу |
| Выпущен | Java 1.2 (1998); binary format stabilised with JDK 1.6 |
| Последняя версия | HPROF binary format 1.0.2 (JDK 6+) |
| Спецификация | docs.oracle.com |
Конвертации HPROF
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах HPROF.