Comment générer et analyser un thread dump à partir d’une instance JBoss en cours d’exécution ?
-
09-06-2019 - |
Question
Comment générer et analyser un thread dump à partir d’une instance JBoss en cours d’exécution ?
La solution
Il existe une méthode spécifique à JBoss qui est légèrement plus conviviale :
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
Ceci est particulièrement utile lorsque vous n'avez pas d'accès direct à la machine hôte (ce qui nécessiterait un "kill").
Autres conseils
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
"Sur les plateformes UNIX, vous pouvez envoyer un signal à un programme en utilisant la commande kill.Il s'agit du signal de sortie, qui est géré par la JVM.Par exemple, sous Solaris, vous pouvez utiliser la commande kill -QUIT process_id, où process_id est le numéro de processus de votre programme Java.
Vous pouvez également saisir la séquence de touches <ctrl>\ dans la fenêtre où le programme Java a été démarré.L'envoi de ce signal demande à un gestionnaire de signal dans la JVM d'imprimer de manière récursive toutes les informations sur les threads et les moniteurs à l'intérieur de la JVM.
...
"Détermination des états des threads
Vous verrez de nombreux threads différents dans de nombreux états différents dans un instantané d'une trace de pile JVM.La clé utilisée est :
R Thread en cours d’exécution ou exécutable
S Fil suspendu
Thread CW en attente d'une variable de condition
MW Thread en attente d'un verrouillage du moniteur
MS Thread suspendu en attente d'un verrouillage du moniteur"
L'application stacktrace trouvée ici est également utile, en particulier sur les machines Windows lorsque l'application Java n'est pas démarrée à partir de la ligne de commande.
Thread.getAllStackTraces() (depuis Java 1.5)
Deux options:
OPTION 1 Générer un thread dump à l'aide de la console JMX
Afin de générer un thread dump :
- Ouvrez la JMXConsole (par exemple :
http://localhost:8080
) - Aller vers
jboss.system:type=ServerInfo
mbean (indice: vous pouvez probablement simplement CTRL-F et entrer type=ServerInfo dans la boîte de dialogue) - Cliquez sur le lien pour le mbean Server Info.
- Naviguez vers le bas où il est indiqué
listThreadDump
- Cliquez dessus et obtenez votre thread dump
Remarques:
Si vous utilisez Internet Explorer, vous devez utiliser File > Save As
pour enregistrer la sortie au lieu de copier les données dans un éditeur de texte.Pour une raison quelconque, lorsque vous copiez le texte depuis Internet Explorer, les sauts de ligne ne sont pas copiés et toute la sortie se retrouve sur une seule ligne.
OPTION 2 Générer un Thread Dump à l'aide de Twiddle
Alternativement, vous pouvez utiliser twiddle pour exécuter le listThreadDump()
et redirigez le code HTML renvoyé directement vers le fichier.Utilisez cette ligne de commande :
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
Parfois, JBoss se verrouille tellement que même jmx-concole ne répond pas.Dans ce cas, utilisez kill -3 sous Linux et EnvoyerSignal sous Windows.
https://community.jboss.org/wiki/ThreadDumpJSP La page contient un threaddump.war autonome et autonome qui peut être utilisé sans JMX.