Maison  >  Article  >  base de données  >  Pourquoi Tomcat 7.x émet-il un avertissement de fuite de mémoire lors de l'utilisation de sources de données JDBC ?

Pourquoi Tomcat 7.x émet-il un avertissement de fuite de mémoire lors de l'utilisation de sources de données JDBC ?

DDD
DDDoriginal
2024-11-07 18:39:02988parcourir

Why Does Tomcat 7.x Issue a Memory Leak Warning When Using JDBC Data Sources?

Avertissement de source de données Tomcat JDBC : fuite de mémoire

Lors de l'arrêt de Tomcat 7.x avec une source de données Tomcat JDBC configurée, vous pouvez rencontrer l'avertissement suivant dans le fichier journal catalina.out :

Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJDBC
SEVERE: The web application [/my_webapp] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

Cet avertissement indique qu'une fuite de mémoire pourrait se produire en raison du fait que le pilote JDBC n'est pas correctement désenregistré lorsque l'application Web est arrêtée. Pour résoudre ce problème, malgré la définition de la méthode de destruction pour DataSource, l'avertissement persiste.

Une autre cause potentielle d'une fuite de mémoire est mise en évidence par un avertissement distinct :

Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/my_webapp] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.

Pour résoudre les deux avertissements :

  1. Déplacez le pilote MySQL JDBC vers le dossier lib Tomcat :

Déplacez le fichier JAR du connecteur/pilote MySQL du fichier WAR dans le dossier lib Tomcat. Le déploiement du fichier WAR avec le pilote inclus peut entraîner des fuites de mémoire dues à un garbage collection incorrect.

  1. Enquêtez sur le fil de discussion du minuteur d'annulation de la déclaration MySQL :

Déterminez pourquoi le thread « Minuterie d'annulation d'instruction MySQL » n'est pas arrêté. Vérifiez le code de l'application ou toute bibliothèque tierce utilisée pour identifier l'endroit où ce thread est démarré et assurez-vous qu'il est correctement arrêté lorsque l'application est arrêtée.

En mettant en œuvre ces mesures, vous pouvez prévenir efficacement les fuites de mémoire et évitez les avertissements dans le fichier journal catalina.out.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn