Strumenti per monitorare l'esecuzione del thread java


Ho un'applicazione Web java in esecuzione su un server Tomcat(Linux). Nell'ambiente di produzione sto affrontando qualche problema di prestazioni. A intervalli casuali il processo jsvc su cui tomcat è in esecuzione inizia a funzionare al 90-100% della CPU. Non sono in grado di scoprire l'innesco per questo evento. Il server è un sistema quad core. Il consumo di memoria non indica alcuna anomalia.

Come posso monitorare quale thread(traccia dello stack dell'applicazione) nell'applicazione sta causando il problema?

Sono verifica con jconsole e PSI Probe , ma entrambi non forniscono alcuna informazione dettagliata su quale thread all'interno dell'applicazione sta causando l'anomalia di utilizzo della CPU.

Author: Derek Mahar, 2011-01-14

5 answers

Un modo relativamente semplice per farlo (che può o non può funzionare per il tuo caso-dipende da quanto tempo si verifica il comportamento):

Quando la tua app mostra il comportamento che vuoi eseguire il debug (in questo caso, il 90-100% di utilizzo della CPU) usa jstack sull'ID del processo:

Http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

Per esaminare quali thread sono in esecuzione e in quali metodi si verificano. Se lo fai un paio di volte, può essere relativamente facile da individuare il catena chiamata colpevole. Puoi quindi eseguire il debug dell'ingresso a quella catena.

Non è necessariamente il metodo migliore o più elegante, ma è molto facile da fare e potrebbe essere tutto ciò di cui hai bisogno. Inizierei da li'. È simile alla filosofia" printf è il miglior debugger che abbia mai usato".

 5
Author: kvista, 2011-01-14 03:55:39

VisualVM è quello che stai cercando. Viene fornito con JDK più recenti e consente di monitorare l'utilizzo del thread .

 4
Author: Matt, 2012-10-15 00:55:09

È possibile ottenere un dump di stacktrace per tutti i thread in qualsiasi applicazione Java inviando un segnale di CHIUSURA.

 kill -QUIT [processId]

Questo verrà visualizzato nel processo' stdout.

 2
Author: Thilo, 2011-01-14 04:59:19

Un altro strumento per mostrare i thread che consumano più cpu è jvmtop

 2
Author: MRalwasser, 2013-03-26 14:53:43

Solo i miei 2 centesimi ma mi chiedo se non stai sperimentando un problema di memoria i picchi della CPU potrebbero essere l'attività GC. Quindi, mentre stai monitorando il tuo tomcat con jconsole, dai un'occhiata alla scheda memoria e controlla se l'utilizzo dell'heap non è elevato.

 1
Author: gabuzo, 2011-01-14 08:42:44