Análisis de thread dumps en WebLogic: ThreadLogic
29/03/2016 -
Siguiendo con el tema de análisis de thread dumps, que se empezó en este otro post, vamos a centrarnos en la utilización de la aplicación ThreadLogic, que ha sido desarrollada por el equipo de arquitectos de Oracle FMW orientándola a dumps de servidores de aplicaciones. Se puede descargar aquí.
Al igual que Samurai y Thread Dump Analyzer (TDA), se trata de una aplicación libre que se arranca lanzando: java -jar <path fichero jar>
Comentar que para las pruebas se han utilizado las mismas aplicaciones que en el post anterior.
Diferencias con Thread Dump Analyzer (TDA)
El desarrollo de esta herramienta se ha realizado a partir de TDA:
- La información se muestra de una forma mucho más visual.
- La información está más categorizada:
- Está muy orientada al análisis de thread dumps de Oracle WebLogic Server:
- Se puede filtrar por el estado del thread:
Stuck threads
Los stuck threads se marcan con este estado a nivel de servidor de aplicaciones cuando un thread está corriendo durante más de X segundos.
Aunque no necesariamente ha de existir un problema, sí que podría llegar a serlo (ver post sobre stuck threads en WebLogic).
Por lo tanto, esta herramienta categoriza los stuck threads como ‘FATAL’:
Al igual que con TDA, si se selecciona el thread, muestra el stack donde se observa la clase con posibles problemas:
Otra forma de encontrar stuck threads es navegar a Thread Group Summary –> WLS Thread Groups –> Rest of WLS –> Threads at Warning or Above
Deadlocks
Cuando existe un deadlock en el thread dump, aparece una categoría que permite ir directamente a la información de los threads implicados:
Configuración de patrones
Como se ha comentado anteriormente, esta herramienta permite la categorización de los threads.
Esto se consigue gracias a unos ficheros XML de configuración con los patrones que se han de cumplir para añadir los threads en una u otra categoría, estado, etc.
Empaquetado con el fichero JAR se encuentran tres ficheros de configuración XML en comoracleateamthreadlogicresources:
- AdvisoryMap.xml: se utiliza para relacionar un patrón con un estado (FATAL, WARNING, etc.) así como para facilitar una descripción y unas instrucciones a seguir para el análisis.
- NonWLSGroups.xml: patrones para incluir los threads en el grupo de threads no propios de WLS.
- WLSGroups.xml: patrones para incluir los threads en el grupo de threads propios de WLS.
Alta nuevo Advisory
Para crear un nuevo patrón de búsqueda a ser utilizado por la herramienta se tienen que seguir estos pasos:
- Desempaquetar el fichero jar original.
- Añadir el fichero AdvisoryMap.xml:
- Volver a empaquetar el jar (en nuestro caso lo hemos renombrado a ThreadLogic-2.0.217.1.jar).
- Lanzar la nueva versión del jar.
Siguiendo estos pasos, se puede ver como se carga el nuevo fichero XML donde tenemos nuestro patrón custom:
Aunque hemos categorizado este patrón como WARNING, como que a su vez se produce un bloqueo, éste también se categoriza como FATAL, que es como se muestra finalmente el estado del thread.
Alta nueva categoría
Puede ser interesante, para analizar el uso de una determinada aplicación, crear una nueva categoría de threads de WLS.
Para realizar esto hay que:
- Desempaquetar el fichero jar original.
- Añadir al fichero WLSGroups.xml:
Para el ejemplo únicamente hemos definido un patrón para cada grupo, pero se pueden añadir varios patrones a base de añadir varios tags ‘<Pattern>’.
- Volver a empaquetar el jar (en nuestro caso lo hemos renombrado a ThreadLogic-2.0.217.1.jar).
- Lanzar la nueva versión del jar.
Siguiendo estos pasos, se crea una nueva categoría con la lista de threads que cumplen el nuevo patrón definido: