2010-10-18 23 views
7

Tengo un Tomcat funcionando como un servicio de Windows, y se sabe que esos no funcionan bien con jstack. jconsole funciona bien, por otro lado, y puedo ver montones de hilos individuales (me estoy conectando a "localhost: puerto" para acceder a él).¿Cómo creo un volcado de hilo a través de JMX?

¿Cómo puedo usar jconsole o una herramienta similar para volcar todas las pilas de hilos en un archivo? (similar a jstack)

Respuesta

5

Puede usar la interfaz de administración ThreadMXBean.

Esta clase FullThreadDump demuestra la capacidad de obtener un volcado completo de subprocesos y también detectar el interbloqueo de forma remota utilizando JMX.

3

Aquí hay otro ejemplo de código que va a escribir un volcado de pila en un archivo:

http://pastebin.com/zwcKC0hz

Utilizamos esta sobre JMX para darnos una aproximación de la pila que volcar obtener al realizar una solicitud JMX o si el proceso detecta una carga alta e inesperada.

4

Hoy en día puede usar la herramienta jvisualvm para conectarse a su JVM remota a través de JMX y crear un volcado de hilo. No sé si esto estaba disponible

Java VisualVM

+1

Es increíblemente lento :( –

1

Sería de gran ayuda si se toma una grabación de vuelo para obtener una visión más profunda sobre el comportamiento de JVM, especialmente centrándose en los métodos calientes.

Por lo general, una grabación de media hora es suficiente. Para activar la grabación, debe estar conectado a las máquinas, y ejecute el siguiente comando:

Si se utiliza Java HotSpot 1.8.x:

$ JAVA_HOME/bin/jcmd VM.unlock_commercial_features $ JAVA_HOME/bin/duración jcmd JFR.start = 1800 = ajustes de perfil filename =/tmp/recording.jfr

si se utiliza java HotSpot 1.7.x:

editar el archivo $ HOME/conf/wrapper.conf añadiendo lo siguiente parámetros en el arranque de JVM:

wrapper.java.additiona = - XX:. + UnlockCommercialFeatures wrapper.java.additional = - XX:. + FlightRecorder

(sustituir con el número de posición correspondiente)

Luego, se han reiniciado las instancias. Una vez hecho esto, emita el siguiente comando:

$ JAVA_HOME/bin/jcmd duración JFR.start = 1800 = ajustes de perfil filename =/tmp/recording.jfr

La grabación de vuelo Wil producir un archivo en/tmp/recording.jfr al finalizar.

Cuestiones relacionadas