Вопрос

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

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

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

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

Это было полезно?

Решение

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

t:   dump thread list
v:   dump thread stack

Это работает под управлением JDK6.Не знаю, как другие.

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

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

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

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

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

С уважением,

скотти

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

Последние JDK (к сожалению, не JRES) включают в себя такие инструменты, как jstack, которые делают такие вещи.JVM начиная с версии 5 включают расширения JMX для получения дампов потоков, статистики памяти и многого другого.Все приложения Java, включая приложения Web Start, имеют доступ к этой функциональности.

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

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

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

Попробуй

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

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

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

Thread.currentThread().dumpStack();

Это выведет трассировку стека в System.out

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top