Перейти к основному содержимому

Если зависло приложение

Если зависло приложение, необходимо снять дамп потоков и памяти, после чего зарегистрировать ошибку.

Как снять дамп потоков?​

Обычно для расследования таких ошибок хватает дампа потоков выполнения приложения.

Для того чтобы снять дамп потоков, можно воспользоваться стандартной утилитой jstack, которая входит в состав JDK (Java Development Kit). Для этого необходимо выполнить следующую команду в командной строке от имени администратора:

jstack -l 22668 > threaddump.txt

Здесь 22668 — pid процесса приложения. Узнать его можно через диспетчер задач (в зависимости от ОС). Если же этим способом сделать это не получается (по причине сбоя подключения), утилиту необходимо запустить с флагом -F:

jstack -F 22668 > threaddump.txt

Далее данный файл с дампом потоков можно указать в отчете об ошибке.

Официальная документация по утилите: https://docs.oracle.com/en/java/javase/11/tools/jstack.html.

Как снять дамп памяти?​

Для того чтобы снять дамп памяти, можно воспользоваться стандартной утилитой jmap, которая входит в состав JDK (Java Development Kit). Для этого необходимо выполнить следующую команду в командной строке от имени администратора:

jmap -dump:format=b,file=memorydump.hprof <pid>

Если же этим способом сделать это не получается (по причине сбоя подключения), необходимо запустить с флагом -F:

jmap -dump:format=b,file=memorydump.hprof -F <pid>

Далее данный файл с дампом потоков можно указать в отчете об ошибке.

Официальная документация по утилите: https://docs.oracle.com/en/java/javase/11/tools/jmap.html.

Что делать дальше?​

Если вся необходимая информация получена и ошибка зарегистрирована, можно закрывать приложение. Если интерактивно это сделать не получается, то можно воспользоваться диспетчером задач (в зависимости от ОС), либо убить процесс через командную строку:

kill -f 22668