Получение дампа потока и кучи Java-процесса в Windows
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для быстрого получения дампа потока, используйте команду jstack -l <PID>
, а для создания дампа кучи подходит jmap -dump:live,file=heapDump.hprof <PID>
. Вместо <PID>
необходимо ввести актуальный идентификатор процесса Java, который можно найти в Диспетчере задач Windows или с помощью инструмента jps
. Созданные файлы дампов пригодятся для дальнейшего анализа.
jstack -l <PID> > threadDump.txt
jmap -dump:live,file=heapDump.hprof <PID>
Как определить PID процесса
Поиск нужного PID может быть достаточно сложным. Воспользуйтесь Диспетчером задач или более информативными инструментами, такими как Монитор ресурсов и jps
, для поиска Java-процессов.
jps -l
Анализ дампов потоков
Дамп потока предоставляет возможность изучить текущее состояние всех потоков виртуальной машины Java. Инструмент jstack
позволяет сделать это одной командой. В Windows этот метод считается наиболее надежным для создания дампа потоков.
Автоматизация создания дампов
С использованием опции -XX:+HeapDumpOnOutOfMemoryError
можно настроить Java на автоматическое создание дампа кучи при возникновении ошибок, связанных с нехваткой памяти. Причем c дополнительным параметром -XX:HeapDumpPath=/path/to/dump
вы можете определить место хранения дампов.
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapDumps -jar your-application.jar
Мониторинг в текущем времени
Java предлагает такие полезные GUI-инструменты, как jconsole
и VisualVM, которые гарантируют разнообразные функции для отладки и мониторинга приложений, включая возможность создания дампов потоков и кучи и профилирования.
jconsole -J-Djava.awt.headless=true
Вот и дамп кучи
После успешного создания дампа кучи необходимо провести его анализ. Инструмент Eclipse Memory Analyzer Tool (MAT) отлично подходит для обнаружения утечек памяти и изучения распределения памяти внутри приложения.
Преимущества использования VisualVM
VisualVM объединяет функциональность разных командных инструментов JDK в единый удобный интерфейс. Он позволяет просматривать дампы кучи и потоков, а также отслеживать использование памяти и регулировать состояние потоков в реальном времени.
Расширение функционала VisualVM
Функционал VisualVM можно улучшить с помощью плагинов. Один из таких плагинов, Visual GC, позволяет наблюдать за процессом сборки мусора в данный момент времени, что очень удобно для анализа работы памяти приложения.
visualvm --plugins install org-netbeans-visualvm-visualgc
Мониторинг изменений
Сделайте дампы кучи и потоков перед критическими операциями и после их завершения. Сравнение двух дампов поможет понять причины изменений в производительности и поведении приложения, что может выступить важной частью профилактической работы.
visualvm --openpid <PID_before_OP> --openpid <PID_after_OP>
Визуализация
Представьте офисное здание с множеством комнат (процессов). Вам необходим доступ к ним, чтобы увидеть чертежи (дамп потока) и записи видеонаблюдения (дамп кучи) — и всё это, когда комнаты закрыты (процесс не обладает консольным интерфейсом).
Доступ к ключам
Для доступа к деталям Java-процесса вам понадобятся определенные инструменты:
- jstack для создания дампа потока,
jmap для создания дампа кучи.
Данная аналогия подчеркивает, что идентификатор процесса (PID) играет роль ключа.
Полезные материалы
- VisualVM: Главная — официальный сайт VisualVM.
- jcmd — руководство по утилите jcmd от компании Oracle.
- Eclipse Memory Analyzer Open Source Project — информация о Eclipse Memory Analyzer (MAT).
- Understanding the Java Garbage Collection Log – DZone — статья о журналах сборки мусора.
- Документация JDK 21 – Главная страница — последняя официальная документация Oracle JDK.