Во время использования программного обеспечения Java странные проблемы иногда возникают необъяснимыми. Эти проблемы часто не могут быть обнаружены с использованием информации журнала. В настоящее время нам нужно проанализировать проблему, проверив соотношение вызова стека в процессе.
Например, когда мы выполняем операцию, несколько предупреждающих коробок будут разъясняться необъяснимым образом, некоторые из которых являются нормальными, а некоторые нет. Для этих сообщений о предупреждении об ошибках, как мы должны найти код в каком месте, где есть всплывающее окно ошибки? Нам нужно просмотреть различные потоки программного обеспечения после всплывающего окна и выяснить, какой поток вызывает проблему. Но иногда из -за окружающей среды, времени и других проблем мы не можем использовать IDE для отладки. Мы можем сделать снимок памяти только через программное обеспечение для инструментов, а затем проанализировать информацию о памяти.
Сегодня я представляю обычно используемый инструмент: JStack
JStack - это инструмент, который поставляется с JDK, а также является программным обеспечением с очень высокой частотой появления в настройке производительности JVM. Так что очень необходимо овладеть этим.
JStack может генерировать снимки потока текущей точки во времени JVM.
Снимок потока - это коллекция стеков методов, которые выполняет каждый поток в текущем JVM. Основные причины создания снимков потока:
1. Причина долгосрочной паузы потоков с помощью снимков резьбы, таких как тупики между потоками, мертвыми петлями и долгосрочное ожидание, вызванное запросом внешних ресурсов.
2. Определите источник информации об исключении с помощью анализа снимков потока взаимосвязи вызовов текущего метода выполнения.
Это очень просто в использовании:
(PS: предпосылка в том, что у вас уже есть JDK с JStack. Лучше всего иметь набор переменных среды.)
Шаг 1: Просмотреть PID процесса через диспетчер задач Windows
Здесь мы кратко говорим о том, что такое PID: PID - это личность каждого процесса. Это уникальная идентификация, назначенная операционной системой для определения идентификации процесса после начала программного обеспечения.
Как показано
Под вкладкой «Процесс», просмотр> выберите столбец
Проверьте PID и подтвердите
Переключитесь на вкладку «Приложение» и выберите программу для снимка памяти. Выбранное изображение - Android Studio. Щелкните правой кнопкой мыши, чтобы перейти к процессу.
Здесь мы видим, что соответствующий пид Android Studio - 9952
Второй шаг - открыть командную строку и выполнить программу JSTACK
Обратите внимание, что если переменная среды не добавлена успешно, ее можно выполнить только в пути JSTACK, в противном случае операционная система не будет ее распознавать.
Как показано на рисунке, здесь, как правило, есть два рабочих параметра, которые используются для снимка памяти.
Их значения следующие:
-l длинные списки распечатают дополнительную информацию о блокировке. Когда возникает тупик, вы можете использовать JStack -l PID, чтобы наблюдать за ситуацией удержания замка
-М смешанный режим, не только выводит информацию о стеке Java, но также выводит информацию о стеке C/C ++ (например, собственный метод)
Обычно используем параметр -l для удовлетворения потребностей
Формат выглядит следующим образом JStack -l pid >> 123.txt
Примечание здесь >> означает перенаправление, что означает вывод захваченных снимков в 987.txt. >> Лучше всего держать пространство, когда два раза
Таким образом, мы будем генерировать файл 987.txt в пути командной строки и в то же время записать моментальный снимок памяти в этот текст.
Как показано на рисунке ниже: