logo

Получение дампа потока и кучи Java-процесса в Windows

Быстрый ответ

Для быстрого получения дампа потока, используйте команду jstack -l <PID>, а для создания дампа кучи подходит jmap -dump:live,file=heapDump.hprof <PID>. Вместо <PID> необходимо ввести актуальный идентификатор процесса Java, который можно найти в Диспетчере задач Windows или с помощью инструмента jps. Созданные файлы дампов пригодятся для дальнейшего анализа.

shell
Скопировать код
jstack -l <PID> > threadDump.txt
jmap -dump:live,file=heapDump.hprof <PID>

Как определить PID процесса

Поиск нужного PID может быть достаточно сложным. Воспользуйтесь Диспетчером задач или более информативными инструментами, такими как Монитор ресурсов и jps, для поиска Java-процессов.

shell
Скопировать код
jps -l

Анализ дампов потоков

Дамп потока предоставляет возможность изучить текущее состояние всех потоков виртуальной машины Java. Инструмент jstack позволяет сделать это одной командой. В Windows этот метод считается наиболее надежным для создания дампа потоков.

Автоматизация создания дампов

С использованием опции -XX:+HeapDumpOnOutOfMemoryError можно настроить Java на автоматическое создание дампа кучи при возникновении ошибок, связанных с нехваткой памяти. Причем c дополнительным параметром -XX:HeapDumpPath=/path/to/dump вы можете определить место хранения дампов.

shell
Скопировать код
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapDumps -jar your-application.jar

Мониторинг в текущем времени

Java предлагает такие полезные GUI-инструменты, как jconsole и VisualVM, которые гарантируют разнообразные функции для отладки и мониторинга приложений, включая возможность создания дампов потоков и кучи и профилирования.

shell
Скопировать код
jconsole -J-Djava.awt.headless=true

Вот и дамп кучи

После успешного создания дампа кучи необходимо провести его анализ. Инструмент Eclipse Memory Analyzer Tool (MAT) отлично подходит для обнаружения утечек памяти и изучения распределения памяти внутри приложения.

Преимущества использования VisualVM

VisualVM объединяет функциональность разных командных инструментов JDK в единый удобный интерфейс. Он позволяет просматривать дампы кучи и потоков, а также отслеживать использование памяти и регулировать состояние потоков в реальном времени.

Расширение функционала VisualVM

Функционал VisualVM можно улучшить с помощью плагинов. Один из таких плагинов, Visual GC, позволяет наблюдать за процессом сборки мусора в данный момент времени, что очень удобно для анализа работы памяти приложения.

shell
Скопировать код
visualvm --plugins install org-netbeans-visualvm-visualgc

Мониторинг изменений

Сделайте дампы кучи и потоков перед критическими операциями и после их завершения. Сравнение двух дампов поможет понять причины изменений в производительности и поведении приложения, что может выступить важной частью профилактической работы.

Markdown
Скопировать код
visualvm --openpid <PID_before_OP> --openpid <PID_after_OP>

Визуализация

Представьте офисное здание с множеством комнат (процессов). Вам необходим доступ к ним, чтобы увидеть чертежи (дамп потока) и записи видеонаблюдения (дамп кучи) — и всё это, когда комнаты закрыты (процесс не обладает консольным интерфейсом).

Доступ к ключам

Для доступа к деталям Java-процесса вам понадобятся определенные инструменты:

  • jstack для создания дампа потока,
  • jmap для создания дампа кучи.

    Данная аналогия подчеркивает, что идентификатор процесса (PID) играет роль ключа.

Полезные материалы

  1. VisualVM: Главная — официальный сайт VisualVM.
  2. jcmd — руководство по утилите jcmd от компании Oracle.
  3. Eclipse Memory Analyzer Open Source Project — информация о Eclipse Memory Analyzer (MAT).
  4. Understanding the Java Garbage Collection Log – DZone — статья о журналах сборки мусора.
  5. Документация JDK 21 – Главная страница — последняя официальная документация Oracle JDK.