2009-06-25 13 views

risposta

4

è possibile utilizzare jconsole o jstack sia nella directory bin del JDK. In particolare, jconsole consente di connettersi al processo e monitorare i thread, incluse le risorse bloccate, e può aiutare a identificare uno stato di deadlock.

+2

Penso che la domanda si riferisca ad alcune statistiche sul conflitto di blocco durante l'esecuzione dell'applicazione - che sono i blocchi attivi nel sistema. – akarnokd

2

VisualVM (parte di Java 1,6) (see)

+0

VisualVM non richiede un plug-in separato per quello? – akarnokd

2

Il JDK ha un supporto integrato - sotto unix, kill -3 il processo, sotto windows, ctrl-break. Verrà visualizzato un dump del thread completo, seguito da eventuali deadlock rilevati. Inoltre, nel dusmp di thread puoi vedere quali thread possiedono le serrature e confrontarle l'una con l'altra.

+1

Non è necessario interrompere il processo per ottenere un dump del thread - è sufficiente eseguire jstack dove è l'id di processo. –

+3

Il comando kill -3 non uccide il processo. Lo segnala solo, ma il processo continuerà a funzionare. –

3

Puoi anche visualizzarlo nel debugger di Eclipse. Nella vista Debug, usa il piccolo menu a triangolo nella barra degli strumenti della vista per attivare "Java-> Mostra monitor".

Quando si sospetta un deadlock, mettere in pausa l'applicazione (selezionare l'applicazione nella vista di debug e premere il pulsante di pausa sulla barra degli strumenti della vista di debug) e se c'è un deadlock, i thread di blocco diventeranno rossi. Se si espandono questi thread è possibile vedere la contesa del blocco.

2

Se si possiede il codice, è possibile creare/cercare un'implementazione di blocco che raccolga statistiche sulla contesa. Altrimenti, prova gli strumenti suggeriti negli altri post.

+0

hai qualche esempio di questo tipo di implementazione (es. Codice java) – Rhubarb

Problemi correlati