2010-10-18 17 views
7

Ho un Tomcat in esecuzione come servizio di Windows e quelli noti non funzionano bene con jstack. jconsole funziona bene, d'altra parte, e posso vedere pile di singoli thread (mi sto collegando a "localhost: port" per accedervi).Come posso creare un dump di thread tramite JMX?

Come posso utilizzare jconsole o uno strumento simile per scaricare tutti gli stack di thread in un file? (simile a jstack)

risposta

5

È possibile utilizzare l'interfaccia di gestione ThreadMXBean.

Questa classe FullThreadDump dimostra la capacità di ottenere un dump di thread completo e rileva anche il deadlock in remoto utilizzando JMX.

3

Ecco un altro esempio di codice che scriverà un dump dello stack in un file:

http://pastebin.com/zwcKC0hz

usiamo questo su JMX a darci un'approssimazione della pila si discarica ottenere quando si effettua una richiesta JMX o se il processo rileva un carico elevato e inaspettato.

4

Al giorno d'oggi è possibile utilizzare lo strumento jvisualvm per connettersi alla JVM remota tramite JMX e creare un dump del thread. Non so se questo era disponibile

Java VisualVM

+1

È incredibilmente lento :( –

1

Sarebbe utile se si prende una registrazione volo per avere una visione più approfondita sul comportamento JVM, soprattutto concentrandosi sui metodi di Hot.

Di solito, una registrazione di mezz'ora è sufficiente. Per attivare una registrazione, è necessario accedere alle macchine, e si immette il seguente comando:

Se si utilizza Java HotSpot 1.8.x:

$ JAVA_HOME/bin/jcmd VM.unlock_commercial_features $ JAVA_HOME/bin/durata jcmd JFR.start = 1800 = impostazioni profilo nomefile =/tmp/recording.jfr

se si utilizza Java HotSpot 1.7.x:

Modifica la tua $ HOME/file/wrapper.conf conf aggiungendo la seguente parametri all'avvio JVM:

wrapper.java.additiona = - XX:. + UnlockCommercialFeatures wrapper.java.additional = - XX:. + FlightRecorder

(sostituire con il corrispondente numero di posizionale)

Quindi, sono le istanze riavviato. Una volta fatto, eseguire il seguente comando:

$ JAVA_HOME/bin/jcmd durata JFR.start = impostazioni 1800 = profilo nomefile =/tmp/recording.jfr

La registrazione volo wil produrre un file su/tmp/recording.jfr su terminazione.

Problemi correlati