Fili di zombi che mangiano il mio cervello (J2EE, Tomcat, Hibernate, Quartz)
-
22-07-2019 - |
Domanda
è Dopotutto dopo tutto.
Ecco il problema: sto mantenendo un codice J2EE vecchio stile, usando Quartz, in cui sto esaurendo i thread. jconsole
mi dice che ci sono poco meno di 60K thread quando va a forma di pera, di cui circa 100 (!!) sono effettivamente in esecuzione. Intuizione e alcuni googling (vedi anche qui ) suggeriscono che ciò che sta accadendo è qualcosa ( Scommetto che Quartz) sta creando thread non gestiti che non vengono mai ripuliti.
Diverse domande secondarie:
-
C'è uno strumento che posso usare facilmente per tracciare la creazione di thread, quindi posso essere certo che il problema sia proprio Quartz?
-
Quasi tutto ciò che ho trovato su problemi simili fa riferimento a Weblogic; è un falso indizio per Tomcat?
-
Qualcuno ha una soluzione nota?
Sono passati anni da quando ho fatto J2EE, quindi non sarei troppo sorpreso se questo è qualcosa che può essere risolto semplicemente.
Aggiorna : sta chiaramente aumentando le discussioni senza limiti, vedi questa trama da jconsole.
Soluzione
-
Prova ad aumentare il livello di registrazione di
org.quartz.simpl.SimpleThreadPool
per eseguire il debug per ottenere ulteriori informazioni. -
Se il problema persiste, provare un listener di registrazione. Quartz ha un'interfaccia JobListener, che è specificata nel suo tutorial . Un listener può aiutarti a tracciare l'esecuzione del lavoro. Forse i lavori non finiscono e non si bloccano.
-
Configura
org.quartz.threadPool.threadCount
per interrompere l'esaurimento dei thread.
Aggiornamento:
-
Inoltre, potresti voler eseguire un dump del thread e vedere le statistiche del thread. visual vm ha un plugin chiamato TDA, oppure puoi usare Analizzatore di dump thread direttamente.
-
Per ogni evenienza, controlla la versione al quarzo per vedere se non ci sono bug conosciuti.
Altri suggerimenti
Hai dato un'occhiata a jvisualvm - ti dà qualche informazione in più.
Inoltre, ottieni le tracce dello stack per vedere cosa stanno aspettando i thread. Potresti avere una sensazione di aha proprio lì.