Devo determinare quali blocchi sono i più contesi, nel mio codice applicazione. Quali strumenti gratuiti posso utilizzare per determinare questo?Quali strumenti gratuiti sono disponibili per analizzare la contesa del blocco in java?
risposta
è 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.
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.
Non è necessario interrompere il processo per ottenere un dump del thread - è sufficiente eseguire jstack
Il comando kill -3 non uccide il processo. Lo segnala solo, ma il processo continuerà a funzionare. –
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.
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.
hai qualche esempio di questo tipo di implementazione (es. Codice java) – Rhubarb
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