我在运行web应用程序时收到此消息。它运行正常,但我在关机时收到此消息
严重:web应用程序注册了JBDC驱动程序[oracle.jdbc.driver.OracleDriver],但在web应用程序停止时未能注销它。为了防止内存泄漏,JDBC驱动程序已被强制注销
谢谢你的帮助
自6.0.24版以来,Tomcat附带了一个内存泄漏检测功能,当webapp的/WEB-INF/lib中有JDBC 4.0兼容的驱动程序时,该功能会导致此类警告消息,而该驱动程序会自动-在webapp启动期间使用ServiceLoaderAPI,但它没有自动-在webapp关闭期间注销自身。此消息纯粹是非正式的,Tomcat已经采取了相应的内存泄漏预防措施
你能做什么
-
忽略这些警告。Tomcat的工作做得很好。实际的bug存在于其他人的代码(有问题的JDBC驱动程序)中,而不是您的代码中。很高兴Tomcat正确地完成了它的工作,并等待JDBC驱动程序供应商修复它,以便您可以升级驱动程序。另一方面,您不应该在webapp的
/WEB-INF/lib中删除JDBC驱动程序,而应该只在服务器的/lib中删除。如果您仍将其保存在webapp的/WEB-INF/lib,则应使用ServletContextListener手动注册和注销它 -
降级到Tomcat 6.0.23或更高版本,这样您就不会被这些警告所困扰。但它会悄悄地继续泄漏内存。不知道这到底是不是好消息。这些内存泄漏是
OutOfMemoryError在Tomcat HotDeployment期间出现问题 -
将JDBC驱动程序移动到Tomcat的
/lib文件夹,并使用连接池数据源来管理驱动程序。请注意,Tomcat的内置DBCP不会在关闭时正确注销驱动程序。另请参见bugDBCP-322作为WONTFIX关闭。您更希望用另一个比DBCP做得更好的连接池来替换DBCP。例如HikariCP或者Tomcat JDBC池