2009-10-30 20 views
9

Es es Hallowe'en después de todo.Zombie threads comiendo mi brainz (J2EE, Tomcat, Hibernate, Quartz)

Aquí está el problema: estoy manteniendo un código J2EE viejo, usando Quartz, en el que me estoy quedando sin hilos. jconsole me dice que hay pocos hilos de 60K cuando va en forma de pera, de los cuales aproximadamente 100 (!!) se están ejecutando. La intuición y algo de google (ver también here) sugieren que lo que está sucediendo es algo (apuesto a que Quartz) es crear hilos no administrados que nunca se limpian.

varias preguntas secundarias:

  1. Se Existe una herramienta que pueda utilizar fácilmente para trazar la creación del hilo, por lo que puede estar seguro de la cuestión es realmente cuarzo?

  2. Casi todo lo que he encontrado sobre problemas similares hace referencia a Weblogic; ¿Es esto una falsa pista para Tomcat?

  3. ¿Alguien tiene una solución conocida?

Han pasado años desde que hice J2EE, así que no me sorprendería mucho si esto es algo que se puede resolver de manera simple.

actualización: Está aumentando claramente hilos sin límite, consulte esta parcela de jconsole.

They're dead, Jim http://i35.tinypic.com/33vnarn.png

+0

¿Observa algún patrón en los nombres de los hilos?Sospecho que el problema es que el código que usa Quartz, no el cuarzo en sí –

+8

+1 para el título, me dice todo lo que necesitaba saber. ¿Has probado la escopeta? – Anthony

+0

Matt, estoy muy desactualizado con las herramientas de depuración de JEE (solo hice una pregunta por separado para recomendaciones: http://stackoverflow.com/questions/1650881/state-of-the-art-in-j2ee-debugging-and -monitoring-tools/1650922 # 1650922) así que todavía no. Pero hay un error conocido de Quartz que provoca que genere hilos no administrados. –

Respuesta

4
  • tratar de aumentar el nivel de registro de org.quartz.simpl.SimpleThreadPool de depurar para obtener más información.

  • Si eso no funciona, intente con un oyente de registro. Quartz tiene una interfaz JobListener, que se especifica en su tutorial. Un oyente puede ayudarlo a rastrear la ejecución del trabajo. Tal vez los trabajos simplemente no terminan y se estancan.

  • Configure org.quartz.threadPool.threadCount para dejar de quedarse sin hilos.

actualización:

  • Además, es posible que desee tomar un vertedero de hilo y ver las estadísticas de rosca. visual vm tiene un complemento llamado TDA, o puede usar Thread dump analyzer directamente.

  • Por si acaso, verifique la versión de cuarzo para ver si no hay ningún error conocido.

+0

Marcelo, el diagrama de jconsole muestra que los hilos están creciendo claramente sin límites. Hmm, debería incluir esa imagen. –

0

¿Has echado un vistazo con jvisualvm? Da más información.

Además, obtenga rastros de pila para ver qué hilos están realmente esperando. Es posible que tengas una sensación de aha allí mismo.