Tomcat JDBC Data Source Warning: Memory Leak
When shutting down Tomcat 7.x with a configured Tomcat JDBC data source, you may encounter the following warning in the catalina.out log file:
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.
This warning indicates that a memory leak could occur due to the JDBC driver not being properly unregistered when the web application is stopped. To resolve this issue, despite setting the destroy-method for the DataSource, the warning persists.
Another potential cause of a memory leak is highlighted by a separate warning:
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.
To address both warnings:
Move the MySQL Connector/Driver JAR file from the WAR file to the Tomcat lib folder. Deploying the WAR file with the driver included can lead to memory leaks due to improper garbage collection.
Determine why the "MySQL Statement Cancellation Timer" thread is not being stopped. Check the application code or any third-party libraries used to identify where this thread is started and ensure that it is properly stopped when the application is shut down.
By implementing these measures, you can effectively prevent memory leaks and avoid the warnings in the catalina.out log file.
The above is the detailed content of Why Does Tomcat 7.x Issue a Memory Leak Warning When Using JDBC Data Sources?. For more information, please follow other related articles on the PHP Chinese website!