Как создать дамп потока приложения Java Web Start

Можно ли получить дамп потока приложения Java Web Start? И если да, то как?

Было бы неплохо, если бы было простое решение, которое позволило бы не разработчику (заказчику) создать дамп потока. Как вариант, можно программно создать дамп потока?

В Java Web Start Console я могу получить список потоков, нажав 't', но трассировки стека не включаются.

Если для ответов требуются определенные версии java, сообщите об этом.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
8 032
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Пытаться

StackTraceElement[] stack = Thread.currentThread().getStackTrace();

Затем вы можете выполнить итерацию по коллекции, чтобы показать верхние элементы стека x, которые вас интересуют.

Последние JDK (к сожалению, не JRE) включают такие инструменты, как jstack, которые делают такие вещи. JVM версии 5 включают расширения JMX для получения дампов потоков, статистики памяти и многого другого. Эта функция доступна для всех приложений Java, включая приложения для запуска из Интернета.

Вам нужно будет либо установить JDK, либо написать клиент JMX, который делает то же самое. Взгляните на http://java.sun.com/javase/6/docs/technotes/guides/management/, чтобы получить больше информации.

Начиная с Java 5 у вас есть метод getStackTrace () класса Thread. Для предыдущих версий вы можете:

Thread.currentThread().dumpStack();

Это напечатает трассировку стека в System.out

Начиная с версии 1.5 вы можете использовать Thread.getAllStackTraces() для перебора Map.

Идеальным будет результат, полученный с помощью Ctrl- \ (или Ctrl-Break или аналогичного), но, похоже, не существует документированного способа его создания. Если вы хотите ограничиться JVM от Sun (или использовать отражение, я полагаю), вы можете покопаться в пакетах sun.* и посмотреть, не появится ли что-нибудь интересное.

Ответ принят как подходящий

В консоли нажмите V вместо T:

t:   dump thread list
v:   dump thread stack

Это работает под JDK6. Не знаю о других.

В качестве альтернативы, под JDK5 (и, возможно, ранее) вы можете отправить полную трассировку стека всех потоков в стандартный выход:

Под Windows: введите ctrl-break в консоли Java.

Под Unix:kill -3 <java_process_id> (например, kill -3 5555). Это НЕ убьет ваше приложение.

Еще одна вещь: как говорят другие, вы можете получить стеки программно через класс Thread, но следите за Thread.getAllStackTraces() до JDK6, поскольку есть утечка памяти.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648

С уважением,

Скотти

Другие вопросы по теме