Определение JSTACK:
JStack - это инструмент трассировки стека, который поставляется с виртуальными машинами Java.
Основное введение:
JStack используется для создания потока снимка текущего времени виртуальной машины Java. Снимки потоков представляют собой набор стеков методов, которые выполняет каждый поток в текущей виртуальной машине Java. Основная цель создания снимков резьбы состоит в том, чтобы найти причины долгосрочных паусов потоков, таких как тупики между потоками, мертвыми петлями и долгосрочное ожидание, вызванное запросом внешних ресурсов.
Когда поток останавливается, вы можете проверить стек вызовов каждого потока через JSTACK, и вы можете знать, что не отвечает поток в фоновом режиме или какие ресурсы он ждет.
Формат команды:
JStack [Option] PID
Основные параметры:
-F Force Printing Inform
-l Long List. Распечатайте дополнительную информацию о блокировке, такой как собственный список синхронизаторов, принадлежащий java.util.concurrent.
-m распечатать все стеки информации о Java и Native C/C ++ Frameworks. -h | -Поллект
идентификатор процесса PID Java, который необходимо печатать информацию о конфигурации, вы можете использовать инструмент JPS для запроса
Случай
C:/пользователи/администратор> JSTACK 5516Full Thread Dilm Dilm Dilm Java Hotpot (TM) 64-битный сервер VM (24,79-B02 смешанный режим): "DissuctJavavm" Prio = 6 TID = 0x000000000027D800 NID = 0x1bbb0 ожидание на условиях [0x0000000000000027d800 nid = 0x1bbb0. "Thread -1" Prio = 6 TID = 0x00000000000CB13800 NID = 0x19AC В ожидании записи монитора [0x000000000000D67F000] java.lang.Thread.state: заблокирован (на объектном мониторе) на Thread.deadlockdemo $ 2.Run (DeadlockDemo.java:35) -with witch a lock000007. java.lang.string) - заблокирован <0x00000007d5a9beb8> (java.lang.string) по адресу java.lang.thread.run (неизвестный источник) "Thread -0" PRIO = 6 TID = 0x000000000CB0E800 NID = 0x6BC В ожидании записи монитора [0x000000000D48F0E800 = 0x6bc java.lang.thread.state: заблокирован (на мониторе объекта) на thread.deadlockdemo $ 1.run (Deadlockdemo.java:21) - В ожидании блокировки <0x00000007d5a9beb8> (java.lang.string) - Заблокирован <0x00000007d5a988> (java.lang. java.lang.thread.run (неизвестный источник)
Здесь запускается код тупика, в результате чего обе потоки в программе ждали, пока другая сторона выпустит блокировку, в результате чего программа будет заложена в тупик.
Из этого кода можно ясно видеть, что строка 35 и строка 21 в DeadlockDemo.class блокируются, и тогда нам нужно оптимизировать эту функцию.
PS: В фактической работе информации дампа часто недостаточно, чтобы подтвердить проблему. Рекомендуется генерировать три дампа. Если каждый дамп указывает на одну и ту же проблему, мы определим типичность проблемы.
Суммировать
Выше приведено в анализе экземпляров JSTACK и Thread Dimpless в этой статье. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!