2009-06-25 6 views

Répondre

4

vous pouvez utiliser jconsole ou jstack aussi bien dans le répertoire bin de votre JDK. La jconsole en particulier vous permet de vous connecter à votre processus et de surveiller les threads, y compris les ressources qu'ils ont verrouillées, et cela peut vous aider à identifier un état de blocage.

+2

Je pense que la question se rapporte à quelques statistiques sur la contention de verrou pendant l'exécution de l'application - qui sont les verrous chauds dans le système. – akarnokd

2

VisualVM (partie de Java 1,6) (see)

+0

VisualVM ne nécessite-t-il pas un plugin séparé pour cela? – akarnokd

2

Le JDK a un support intégré - sous unix, kill -3 le processus, sous windows, ctrl-break. Cela affichera un vidage de thread complet, suivi de tous les blocages détectés. De plus, dans le thread dump, vous pouvez voir quels threads possèdent les verrous, et les comparer les uns aux autres.

+1

Vous n'avez pas besoin de tuer le processus pour obtenir un vidage de threads - exécutez simplement jstack est l'ID du processus. –

+3

La commande kill -3 ne tue pas le processus. Cela ne fait que le signaler, mais le processus continuera à fonctionner. –

3

Vous pouvez également voir ceci dans le débogueur d'eclipse. Dans la vue Débogage, utilisez le petit menu vers le bas de la barre d'outils de la vue pour activer "Java-> Afficher les moniteurs". Lorsque vous suspectez un blocage, mettez l'application en pause (sélectionnez l'application dans la vue de débogage et appuyez sur le bouton de pause dans la barre d'outils de la vue de débogage) et en cas d'interblocage, les threads de blocage vireront au rouge. Si vous développez ces threads, vous pouvez voir la contention de verrouillage.

2

Si vous possédez le code, vous pouvez créer/rechercher une implémentation de verrouillage qui rassemble des statistiques de contention. Sinon, essayez les outils proposés dans les autres messages.

+0

avez-vous des exemples de ce type de mise en œuvre (c.-à-d. Code java) – Rhubarb

Questions connexes