Pergunta

É possível obter um despejo de thread de uma aplicação Java Web Start? E se sim, como?

Seria bom se houvesse uma solução simples, o que permitiria um não-desenvolvedor (cliente) para criar um despejo de thread. Como alternativa, é possível criar um despejo de thread de programação?

Na Iniciar Console Java Web posso obter uma lista de tópicos pressionando 't', mas stacktraces não estão incluídos.

Se as respostas exigem certas versões do Java, por favor dizê-lo.

Foi útil?

Solução

No console, pressione V, em vez de T:

t:   dump thread list
v:   dump thread stack

Isso funciona sob JDK6. Não sei sobre os outros.

Alternativa, sob JDK5 (e possivelmente antes) você pode enviar um rastreamento de pilha completa de todos os tópicos para fora padrão:

No Windows:. tipo ctrl-break no console Java

No Unix: kill -3 <java_process_id> (Por exemplo, matar -3 5555). Isso não vai matar seu aplicativo.

Uma outra coisa:. Como outros dizem, você pode obter as pilhas programaticamente através da classe Thread mas atente para Thread.getAllStackTraces() antes JDK6 como há um vazamento de memória

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

Saudações,

Scotty

Outras dicas

JDKs recentes (infelizmente não JREs) incluem ferramentas como jstack que faz essas coisas. JVMs da versão 5 inclui extensões JMX para obter lixeiras fios, estatísticas de memória, e muito mais. Todos os aplicativos Java, incluindo aplicações Web Start, têm essa funcionalidade disponível.

Você nem precisa ter o JDK instalado ou escrever um cliente JMX que faz a mesma coisa. Dê uma olhada na http://java.sun.com/javase / 6 / docs / technotes / guias / gestão / para obter mais informações.

Desde 1,5 você pode usar Thread.getAllStackTraces() para obter um Map para iterar.

A saída ideal seria que produzido a partir de Ctrl- \ (ou Ctrl-break ou similar), mas não parece ser uma forma documentada de produzir este. Se você está disposto a limitar-se a JVM da Sun (ou utilização reflexão suponho) você poderia ter uma escavação em torno dos pacotes sun.* e ver se alguma coisa interessante aparece.

Tente

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

Em seguida, você pode iterar sobre a coleção para mostrar os elementos da pilha top x você está interessado.

Desde Java 5 você tem o método getStackTrace () da classe Thread. Para versões anteriores que você pode fazer:

Thread.currentThread().dumpStack();

Isto irá imprimir o rastreamento de pilha para System.out

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top