2011-09-28 40 views
7

Estoy usando Quartz para ejecutar un trabajo cada hora. El servlet se ejecuta en Tomcat y estoy usando ServletConextListener para escuchar cuando se destruye el contexto.Quartz: Memory Leak?

Cuando Cierre Tomcat, me sale el mensaje:

"parece haber iniciado un hilo llamado [MyScheduler_Worker-1] pero no logró detenerlo".

Pero después me aparece este mensaje:

"[DEBUG] 28 11 SEP: 45: 26.671 AM MyScheduler_Worker-1 [org.quartz.simpl.SimpleThreadPool]

WorkerThread se apaga."

Entonces, ¿es seguro asumir que no hay pérdida de memoria debido a este hilo?

Así es como se ve mi registro:

{SEVERE: The web application [/*************] appears to have started a thread 

named [MyScheduler_Worker-1] but has failed to stop it. This is very likely to c 

reate a memory leak. 

Sep 28, 2011 11:45:26 AM org.apache.catalina.loader.WebappClassLoader clearRefer 

encesThreads 

SEVERE: The web application [/*************] appears to have started a thread 

named [MyScheduler_Worker-2] but has failed to stop it. This is very likely to c 

reate a memory leak. 

Sep 28, 2011 11:45:26 AM org.apache.catalina.loader.WebappClassLoader clearRefer 

encesThreads 

SEVERE: The web application [/*************] appears to have started a thread 

named [MyScheduler_Worker-3] but has failed to stop it. This is very likely to c 

reate a memory leak. 

[DEBUG] 28 Sep 11:45:26.671 AM MyScheduler_Worker-2 [org.quartz.simpl.SimpleThre 

adPool] 

WorkerThread is shut down. 



[DEBUG] 28 Sep 11:45:26.671 AM MyScheduler_Worker-1 [org.quartz.simpl.SimpleThre 

adPool] 

WorkerThread is shut down. 



[DEBUG] 28 Sep 11:45:26.671 AM MyScheduler_Worker-3 [org.quartz.simpl.SimpleThre 

adPool] 

WorkerThread is shut down. 
+0

Tomcat se dice que no da suficiente tiempo para el apagado de cuarzo para las roscas. Pero aún no he podido verificar esto. – Codo

Respuesta

4

Sé que esto es un hilo viejo, pero en caso de que otros están en busca de ella.

Usamos las advertencias de los hilos todo el tiempo hasta que agregamos el código para cerrar el Programador de Cuarzo en nuestro método ServletContextListener.shutDown().

Para apagar el Programador:

  quartzScheduler.shutdown(); 

      int ct = 0; 

      // Try waiting for the scheduler to shutdown. Only wait 30 seconds. 
      while(ct < 30) { 
       ct++; 
       // Sleep for a second so the quartz worker threads die. This 
       // suppresses a warning from Tomcat during shutdown. 
       Thread.sleep(1000); 
       if (quartzScheduler.isShutdown()) { 
        break; 
       } 
      }