Как вы генерируете и анализируете дамп потока из запущенного экземпляра JBoss?
-
09-06-2019 - |
Вопрос
Как вы генерируете и анализируете дамп потока из запущенного экземпляра JBoss?
Решение
Существует специфичный для JBoss метод, который немного более удобен для пользователя:
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
Это особенно полезно, когда у вас нет прямого доступа к хост-компьютеру (что потребовало бы "уничтожения").
Другие советы
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
"На платформах UNIX вы можете отправить сигнал программе, используя команду kill.Это сигнал завершения работы, который обрабатывается JVM.Например, в Solaris вы можете использовать команду kill -QUIT process_id, где process_id - это номер процесса вашей Java-программы.
В качестве альтернативы вы можете ввести последовательность клавиш <ctrl>\ в окне, в котором была запущена программа Java.Отправка этого сигнала инструктирует обработчик сигналов в JVM рекурсивно распечатать всю информацию о потоках и мониторах внутри JVM."
...
"Определение состояний потока
Вы увидите много разных потоков во многих разных состояниях в моментальном снимке из трассировки стека JVM.Используемый ключ - это:
R Запущенный или управляемый поток
S Подвесная нить
Поток CW, ожидающий получения переменной условия
Поток MW, ожидающий блокировки монитора
Поток MS приостановлен в ожидании блокировки монитора "
Найдено приложение stacktrace здесь это также полезно, особенно на компьютерах с Windows, когда java-приложение запускается не из командной строки.
Thread.getAllStackTraces() (начиная с Java 1.5)
Два варианта:
ВАРИАНТ 1 Создайте дамп потока с помощью консоли JMX
Для того, чтобы сгенерировать дамп потока:
- Откройте JMXConsole (например:
http://localhost:8080
) - Перейдите к
jboss.system:type=ServerInfo
мбеан (подсказка: вероятно, вы можете просто нажать CTRL-F и ввести type=ServerInfo в диалоговом окне) - Нажмите на ссылку для получения информации о сервере mbean.
- Перейдите к нижней части страницы, где написано
listThreadDump
- Нажмите на него и получите дамп вашего потока
Примечания:
Если вы используете Internet Explorer, вам следует использовать File > Save As
сохранить выходные данные вместо копирования данных в текстовый редактор.По какой-то причине, когда вы копируете текст из Internet Explorer, разрывы строк не копируются, и все выходные данные заканчиваются одной строкой.
ВАРИАНТ 2 Создайте дамп потока с помощью Twiddle
В качестве альтернативы вы можете использовать twiddle для выполнения listThreadDump()
используйте метод и передайте возвращенный HTML-код непосредственно в файл.Используйте эту командную строку:
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
Иногда JBoss блокирует так сильно, что даже jmx-concole не отвечает.В таком случае используйте kill -3 в Linux и Отправленный сигнал в Windows.
https://community.jboss.org/wiki/ThreadDumpJSP страница содержит автономный файл threaddump.war, который можно использовать без JMX.