Можно ли получить дамп потока приложения Java Web Start? И если да, то как?
Было бы неплохо, если бы было простое решение, которое позволило бы не разработчику (заказчику) создать дамп потока. Как вариант, можно программно создать дамп потока?
В Java Web Start Console я могу получить список потоков, нажав 't', но трассировки стека не включаются.
Если для ответов требуются определенные версии java, сообщите об этом.




Пытаться
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
С уважением,
Скотти