Come si genera e si analizza un dump del thread da un'istanza JBoss in esecuzione?
-
09-06-2019 - |
Domanda
Come si genera e si analizza un dump del thread da un'istanza JBoss in esecuzione?
Soluzione
Esiste un metodo specifico per JBoss che è leggermente più user-friendly:
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
Ciò è particolarmente utile quando non si ha accesso diretto alla macchina host (cosa che "kill" richiederebbe).
Altri suggerimenti
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
"Sulle piattaforme UNIX puoi inviare un segnale a un programma utilizzando il comando kill.Questo è il segnale di uscita, che viene gestito dalla JVM.Ad esempio, su Solaris puoi utilizzare il comando kill -QUIT process_id, dove process_id è il numero del processo del tuo programma Java.
In alternativa è possibile inserire la sequenza di tasti <ctrl>\ nella finestra in cui è stato avviato il programma Java.L'invio di questo segnale indica a un gestore di segnale nella JVM di stampare ricorsivamente tutte le informazioni sui thread e sui monitor all'interno della JVM."
...
"Determinazione degli stati del thread
Vedrai molti thread diversi in molti stati diversi in uno snapshot da un'analisi dello stack JVM.La chiave utilizzata è:
R Thread in esecuzione o eseguibile
S Filo sospeso
CW Thread in attesa di una variabile di condizione
MW Thread in attesa di blocco del monitor
MS Thread sospeso in attesa del blocco del monitor"
L'app Stacktrace è stata trovata Qui è anche utile, soprattutto su macchine Windows quando l'app Java non viene avviata dalla riga di comando.
Thread.getAllStackTraces() (da Java 1.5)
Due opzioni:
OPZIONE 1 Genera un dump del thread utilizzando la console JMX
Per generare un dump del thread:
- Apri la JMXConsole (ad esempio:
http://localhost:8080
) - Navigare verso
jboss.system:type=ServerInfo
bean (suggerimento: probabilmente puoi semplicemente CTRL-F e inserire type=ServerInfo nella finestra di dialogo) - Fare clic sul collegamento per l'mbean Server Info.
- Vai in fondo dove dice
listThreadDump
- Fare clic e ottenere il dump del thread
Appunti:
Se usi Internet Explorer dovresti usare File > Save As
per salvare l'output invece di copiare i dati in un editor di testo.Per qualche motivo quando copi il testo da Internet Explorer le interruzioni di riga non vengono copiate e tutto l'output finisce su un'unica riga.
OPZIONE 2 Genera un thread dump utilizzando Twiddle
In alternativa puoi usare twiddle per eseguire il file listThreadDump()
metodo e reindirizzare l'HTML restituito direttamente nel file.Utilizza questa riga di comando:
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
A volte JBoss si blocca così tanto che anche jmx-concole non risponde.In tal caso utilizzare kill -3 su Linux e Invia segnale Su Windows.
https://community.jboss.org/wiki/ThreadDumpJSP La pagina presenta threaddump.war autonomo e autonomo che può essere utilizzato senza JMX.