Question

Est-il possible d'obtenir un vidage de thread d'une application Java Web Start? Et si oui, comment?

Ce serait bien s'il existait une solution simple qui permettrait à un non-développeur (client) de créer un vidage de threads. Sinon, est-il possible de créer un dump de thread par programme?

Dans la console Java Web Start, je peux obtenir une liste de threads en appuyant sur 't', mais les stacktraces ne sont pas inclus.

Si les réponses nécessitent certaines versions de Java, merci de le préciser.

Était-ce utile?

La solution

Dans la console, appuyez sur V plutôt que sur T:

t:   dump thread list
v:   dump thread stack

Cela fonctionne sous JDK6. Je ne sais pas pour les autres.

Alternative, sous JDK5 (et peut-être plus tôt), vous pouvez envoyer une trace de pile complète de tous les threads à la sortie standard:

Sous Windows: tapez ctrl-break dans la console Java.

Sous Unix: kill -3 <java_process_id> (par exemple tuer -3 5555). Cela ne tuera pas votre application.

Une autre chose: comme d’autres le disent, vous pouvez obtenir les piles par programmation via la classe Thread mais faites attention à Thread.getAllStackTraces() avant JDK6 car il y a une fuite de mémoire.

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

Cordialement,

scotty

Autres conseils

Les JDK récents (malheureusement pas les JRE) incluent des outils tels que jstack qui fait de telles choses. Les machines virtuelles à partir de la version 5 incluent des extensions JMX pour obtenir des vidages de threads, des statistiques sur la mémoire, etc. Cette fonctionnalité est disponible dans toutes les applications java, y compris les applications de démarrage Web.

Vous devez soit installer le JDK, soit écrire un client JMX faisant la même chose. Jetez un coup d’œil à http://java.sun.com/javase / 6 / docs / technotes / guides / management / pour obtenir plus d'informations.

Depuis la version 1.5, vous pouvez utiliser Thread.getAllStackTraces() pour obtenir un Map élément à parcourir.

La sortie idéale serait celle produite par Ctrl- \ (ou Ctrl-Break ou similaire), mais il ne semble pas exister de moyen documenté de le produire. Si vous êtes prêt à vous limiter à la machine virtuelle Java de Sun (ou à la réflexion, je suppose), vous pouvez explorer les sun.* packages et voir si quelque chose d'intéressant apparaît.

Essayez

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

Ensuite, vous pouvez parcourir la collection pour afficher les x éléments de pile les plus intéressants qui vous intéressent.

Depuis Java 5, vous avez la méthode getStackTrace () de la classe Thread. Pour les versions précédentes, vous pouvez faire:

Thread.currentThread().dumpStack();

Ceci imprimera la trace de la pile sur System.out

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top