Comment générer et analyser un thread dump à partir d’une instance JBoss en cours d’exécution ?

StackOverflow https://stackoverflow.com/questions/59787

  •  09-06-2019
  •  | 
  •  

Question

Comment générer et analyser un thread dump à partir d’une instance JBoss en cours d’exécution ?

Était-ce utile?

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 :

  1. Ouvrez la JMXConsole (par exemple : http://localhost:8080 )
  2. Aller vers jboss.system:type=ServerInfo mbean (indice: vous pouvez probablement simplement CTRL-F et entrer type=ServerInfo dans la boîte de dialogue)
  3. Cliquez sur le lien pour le mbean Server Info.
  4. Naviguez vers le bas où il est indiqué listThreadDump
  5. 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.

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