2009-06-25 22 views

Respuesta

4

puede utilizar jconsole o jstack tanto en el directorio bin de JDK. La consola J en particular le permite conectarse a su proceso y monitorear los hilos, incluidos los recursos que han bloqueado, y puede ayudarlo a identificar un estado de punto muerto.

+2

Creo que la pregunta se relaciona con algunas estadísticas sobre la contención de bloqueo durante la ejecución de la aplicación: cuáles son los bloqueos activos en el sistema. – akarnokd

2

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

+0

¿No requiere VisualVM un complemento por separado para eso? – akarnokd

2

El JDK tiene un poco de soporte incorporado: bajo Unix, kill -3 el proceso, bajo windows, ctrl-break. Esto mostrará un volcado de hilo completo, seguido de cualquier punto muerto detectado. Además, en el filtro de hilo puedes ver qué hilos poseen qué bloqueos y compararlos entre sí.

+1

No necesita matar el proceso para obtener un volcado de hilo; simplemente ejecute jstack donde es la identificación del proceso. –

+3

El comando kill -3 no mata el proceso. Simplemente lo señala, pero el proceso continuará ejecutándose. –

3

También puede ver esto en el depurador de eclipse. En la vista de depuración, use el pequeño menú de triángulo descendente en la barra de herramientas de vista para activar "Java-> Mostrar monitores".

Cuando sospeche un interbloqueo, pause la aplicación (seleccione la aplicación en la vista de depuración y presione el botón de pausa en la barra de herramientas de depuración) y si hay un interbloqueo, los hilos de bloqueo se volverán rojos. Si expandes esos hilos, puedes ver la contención del bloqueo.

2

Si posee el código, puede crear/buscar una implementación de bloqueo que recopile estadísticas de contienda. Si no, prueba las herramientas sugeridas en las otras publicaciones.

+0

tiene algún ejemplo de este tipo de implementación (es decir, código de Java) – Rhubarb

Cuestiones relacionadas