Análisis de thread dumps en WebLogic

Hace unos meses escribí este post donde os explicaba qué son los stuck threads y cómo detectarlos. En el post de hoy os voy a presentar algunas herramientas que os pueden ser útiles para realizar el análisis de thread dumps, necesarios para la detección de stuck threads, deadlocks, etc.

Sin embargo, no hay que perder de vista el hecho de que como administradores únicamente podremos saber dónde está el problema, no solventarlo.

Ejecución de pruebas

Por si tenéis interés en realizar vuestras propias pruebas, aquí podéis encontrar una aplicación para provocar deadlocks, gentileza de nuestro compañero Àngel Ollé.

Una vez desplegada en una instancia WebLogic, se puede provocar un deadlock realizando peticiones a http://ip:puerto/DeadLockServlet/dl

Para generar stuck threads podéis utilizar la aplicación StuckThreadForFree realizando llamadas a http://ip:puerto/StuckThreadForFree sobre la instancia WebLogic.

Se definen cuántos threads levantar, cuántos segundos mantenerlos levantados y qué operación estarán ejecutando durante ese tiempo:

stuckthreadforfree prueba

¿Qué herramienta utilizar?

Hay muchas herramientas en el mercado pero las más comúnmente utilizadas, que además son libres, son:

  1. Samurai
  2. Thread Dump Analyzer (TDA)
  3. ThreadLogic

Todas consisten en un JAR, por lo que su ejecución es tan simple como lanzar ‘java -jar <path fichero jar>’. La diferencia reside en cómo se muestra la información en la interfaz.

Una vez se ha iniciado la aplicación, abrimos el fichero de texto donde tenemos el thread dump.

Comentar que las aplicaciones pueden interpretar ficheros con varios thread dumps.

 

1. Samurai

Descarga: http://yusuke.homeip.net/samurai/en/samurai.jar

Es una aplicación muy intuitiva donde se identifican con facilidad bloqueos:

Samurai threads bloqueados

Si se clica sobre alguno de los threads, se muestra la información del thread en cada uno de los thread dumps del fichero de entrada:

Samurai extracto thread

Por lo que respecta a los stuck threads, esta aplicación no los detecta pero nos sirve para ver qué es lo qué está realizando el thread.

Los pasos a seguir serían:

  1. Abrir cada thread dump.

samurai browse dump

  1. Buscar la palabra STUCK en cada dump hasta encontrar un thread en este estado: en nuestro caso aparece el primer stuck thread en el dump 2.
  2. Pulsar sobre el thread para que se muestre el estado de ese thread en cada uno de los dumps.

samurai búsqueda stuck thread

Una vez tenemos identificado el thread podemos ver qué estaba ejecutando, que en nuestro caso es la función ‘threadCalc’ de la clase ‘com.munzandmore.stuckthread.LongRunningEJB’.

samurai stuck thread

código threadCalc

 

2. Thread Dump Analyzer (TDA)

Descarga: https://java.net/projects/tda/downloads

A diferencia de la aplicación anterior, ésta no muestra la información de una forma tan visual, aunque es igualmente identificable el estado de los diferentes threads:

tda desglose dumps

Para cada una de las categorías podemos obtener el listado de threads y el extracto de los mismos.

Lo mismo para los deadlocks:

tda-deadlock2

Así mismo, se puede obtener para cada objeto qué threads lo están utilizando:

tda objeto

Para encontrar los stuck threads se ha de abrir cada uno de los dumps y buscar la palabra STUCK, al igual que con Samurai.

La diferencia respecto la aplicación anterior es que al seleccionar un thread no se puede ver el stack para el thread en cada uno de los dumps.

Lo que sí se puede hacer es comparar dos thread dumps para detectar threads presentes en ambos:

tda compara dumps

tda detección threads

tda stuck threads comparacion

3. ThreadLogic

En mi próximo post os hablaré de esta herramienta.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Nuestra propuesta de valor
Posts 100% Oracle
Sigue nuestro día a día