Домой Учебники по Java и J2EE Как программно генерировать дамп Java-потока

Как программно генерировать дамп Java-потока

706
0

Что такое дамп?

Дамп потока — это снимок того, что в данный момент выполняется в вашей Java-программе .

Хотя формат и содержимое дампа потоков могут различаться у разных поставщиков Java, как минимум, он предоставляет вам список трассировок стека для всех потоков Java на виртуальной машине Java .

Используя эту информацию, вы можете analyze the problem самостоятельно или работайте с теми, кто написал работающий код, чтобы проанализировать проблему.

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

Трассировка стека — это дамп текущего стека выполнения, который показывает вызовы методов, выполняющиеся в этом потоке снизу вверх.

Вот образец дампа темы:

Образец Дамп Дамп

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
crunchifyThread3
   Java. яз. Thread. Состояние : Runnable
         на солнце. управление . ThreadImpl . getThreadInfo1 ( Native Метод )
         на солнце. управление . ThreadImpl . getThreadInfo ( ThreadImpl . Java : 174 )
         на ком . crunchify. учебники . CrunchifySynchronizeThread . getThreadDump ( CrunchifyThreadDeadLock . java : 64 )
         на ком . crunchify. учебники . CrunchifySynchronizeThread . run ( CrunchifyThreadDeadLock . java : 50 )
         в Яве . яз. Thread. запустить ( Тема . Java : 722 )
crunchifyThread2
   Java. яз. Thread. Состояние : BLOCKED
         на ком . crunchify. учебники . CrunchifySynchronizeThread . run ( CrunchifyThreadDeadLock . java : 53 )
         в Яве . яз. Thread. запустить ( Тема . Java : 722 )
crunchifyThread1
   Java. яз. Thread. Состояние : BLOCKED
         на ком . crunchify. учебники . CrunchifySynchronizeThread . run ( CrunchifyThreadDeadLock . java : 53 )
         в Яве . яз. Thread. запустить ( Тема . Java : 722 )
Диспетчер сигналов
   Java. яз. Thread. Состояние : Runnable
«Финалайзер»
   Java. яз. Thread. Состояние : ОЖИДАНИЯ
         в Яве . яз. Объект . ждать (Родной Метод )
         в Яве . яз. ссылка ReferenceQueue . удалить ( ReferenceQueue . Java : 135 )
         в Яве . яз. ссылка ReferenceQueue . удалить ( ReferenceQueue . Java : 151 )
         в Яве . яз. ссылка Финализатор $ FinalizerThread . запустить ( Финализатор . Ява : 189 )
«Ссылочный обработчик»
   Java. яз. Thread. Состояние : ОЖИДАНИЯ
         в Яве . яз. Объект . ждать (Родной Метод )
         в Яве . яз. Объект . подождите ( Объект . Java : 503 )
         в Яве . яз. ссылка Ссылка $ ReferenceHandler . запустить ( Справ . Ява : 133 )

Java-метод для создания дампа потока:

Метод crunchifyGenerateThreadDump ()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
       / **
* @author Crunchify.com
*
* /
     общественности статический строка crunchifyGenerateThreadDump ( ) {
         окончательный StringBuilder dump знак равно новый StringBuilder ( ) ;
         окончательный ThreadMXBean threadMXBean знак равно Управление фабрики . getThreadMXBean ( ) ;
         окончательный ThreadInfo [ ] threadInfos знак равно threadMXBean . getThreadInfo ( threadMXBean . getAllThreadIds ( ) , 100 ) ;
         за ( ТемаИнфо ТемаИнфо : нитьИнфос ) {
             свалка. добавить ( '' ' ) ;
             свалка. append ( threadInfo . getThreadName ( ) ) ;
             свалка. добавить ( / ) ;
             окончательный Thread. Государство государство знак равно ThreadInfo. getThreadState ( ) ;
             свалка. append ( / n java.lang.Thread.State: ) ;
             свалка. приложение ( состояние ) ;
             окончательный StackTraceElement [ ] stackTraceElements знак равно ThreadInfo. getStackTrace ( ) ;
             за ( окончательный StackTraceElement stackTraceElement : stackTraceElements ) {
                 свалка. append ( / n at ) ;
                 свалка. append ( stackTraceElement ) ;
             }
             свалка. добавить ( / н / н ) ;
         }
         вернуть свалка. toString ( ) ;
     }

В моем предыдущем примере Java Deadlock я использовал тот же метод для создания дампа потока. Вот список всех примеров Java и Spring MVC, которые могут вас заинтересовать.

ЧИТАТЬ ТАКЖЕ:  Как получить время работы JVM программно?

Хотите сгенерировать дамп кучи памяти на OOM?

Пожалуйста, используйте -XX:+HeapDumpOnOutOfMemory параметр при запуске приложения Java.

Как программно генерировать дамп Java-потока

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь