Je rencontre une fuite de mémoire due à des threads orphelins dans Tomcat. En particulier, il semble que Guice et le pilote JDBC ne ferment pas les threads.
Aug 8, 2012 4:09:19 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [com.google.inject.internal.util.$Finalizer] but has failed to stop it. This is very likely to create a memory leak.
Aug 8, 2012 4:09:19 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
Je sais que cette question est similaire à d'autres questions (telles que celui-ci ), mais dans mon cas, la réponse "ne vous en faites pas" ne sera pas suffisante, car cela me pose des problèmes. J'ai un serveur CI qui met régulièrement à jour cette application, et après 6 à 10 rechargements, le serveur CI se bloque parce que Tomcat n'a plus de mémoire.
Je dois être en mesure d'éliminer ces fils orphelins afin de pouvoir faire fonctionner mon serveur CI de manière plus fiable. Toute aide serait appréciée !
0 votes
Vous êtes sûr que ce sont les causes de l'erreur OOM ? Le problème JDBC est résolu en tuant le thread à l'aide d'un écouteur de contexte sur l'événement de destruction du contexte ET en plaçant le pilote dans la bibliothèque de l'application afin que le chargement des classes soit effectué dans le contexte de l'application et non dans celui du conteneur.
0 votes
Merci. Je suis assez nouveau dans ce domaine, donc je ne suis pas du tout sûr que ce soit la cause de l'erreur OOM, mais c'est la seule note suspecte que j'obtiens dans le journal de Tomcat lorsque je redéploie cette application Web. Avez-vous des conseils pour trouver la source ou utiliser correctement le contextListener comme vous le recommandez ? Après une recherche rapide sur Google, je n'ai trouvé aucun tutoriel pertinent, mais je serais heureux de me documenter sur le sujet si vous pouviez m'indiquer la bonne direction.
1 votes
Pour décharger les pilotes en utilisant un contextlistener, consultez les réponses ici : stackoverflow.com/questions/3320400/
0 votes
J'ai le même problème. Tomcat affiche le thread "Abandoned connection cleanup thread" autant de fois que la webapp a été redémarrée et le désenregistrement des pilotes ne m'aide pas du tout... une bonne nouvelle ?
0 votes
Peut-être que c'est moi qui ne suis pas très intelligent, mais je ne vois pas de réponse liée également au problème de guava (la plupart des réponses se concentrent sur le mysql conn pool), qui m'affecte (avant d'ajouter cette chose, l'application se nettoyait bien au rechargement/arrêt) : Je finis par fixer une limite plus élevée pour l'espace perm gen, de sorte que je peux attendre plus longtemps entre les redémarrages de tomcat à cause de cela. C'est triste de voir une bibliothèque de Google avec une fuite de mémoire...
0 votes
J'utilise le pilote MySql 5.1.36 et je vois l'erreur. Ce bogue a-t-il été corrigé ?