Domanda

È possibile ottenere un dump del thread di un'applicazione Java Web Start?E se sì, come?

Sarebbe bello se esistesse una soluzione semplice, che consentisse a un non sviluppatore (cliente) di creare un dump del thread.In alternativa, è possibile creare un dump del thread a livello di codice?

Nella console Java Web Start posso ottenere un elenco di thread premendo "t" ma gli stacktrace non sono inclusi.

Se le risposte richiedono determinate versioni Java, comunicalo.

È stato utile?

Soluzione

Nella console, premi V anziché T:

t:   dump thread list
v:   dump thread stack

Funziona con JDK6.Non so degli altri.

In alternativa, sotto JDK5 (e possibilmente prima) puoi inviare una traccia dello stack completo di tutti i thread allo standard out:

Sotto Windows: digitare ctrl-break nella console Java.

Sotto Unix: kill -3 <java_process_id>(per esempio.uccidi -3 5555).Questo NON ucciderà la tua app.

Un'altra cosa:Come altri dicono, puoi ottenere gli stack in modo programmatico tramite il file Thread lezione ma attenzione Thread.getAllStackTraces() prima di JDK6 perché c'è una perdita di memoria.

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

Saluti,

scotty

Altri suggerimenti

I JDK recenti (purtroppo non i JRE) includono strumenti come jstack che fa queste cose.Le JVM della versione 5 includono estensioni JMX per ottenere dump dei thread, statistiche di memoria e molto altro.Tutte le applicazioni Java, comprese le applicazioni Web Start, dispongono di questa funzionalità.

Dovresti avere installato JDK o scrivere un client JMX che faccia la stessa cosa.Dare un'occhiata a http://java.sun.com/javase/6/docs/technotes/guides/management/ per ottenere maggiori informazioni.

Dalla 1.5 puoi usare Thread.getAllStackTraces() prendere un Map per ripetere.

L'output ideale sarebbe quello prodotto da Ctrl-\ (o Ctrl-Break o simili), ma non sembra esserci un modo documentato per produrlo.Se sei disposto a limitarti alla JVM del sole (o suppongo che usi la riflessione) potresti dare un'occhiata intorno sun.* packages e vedere se viene fuori qualcosa di interessante.

Tentativo

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

Quindi puoi scorrere la raccolta per mostrare i primi x elementi dello stack che ti interessano.

A partire da Java 5 hai il metodo getStackTrace() della classe Thread.Per le versioni precedenti puoi fare:

Thread.currentThread().dumpStack();

Questo stamperà la traccia dello stack su System.out

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top