当我运行网络应用程序时,我收到此消息。它运行良好,但我在关机期间收到此消息。
严重:Web 应用程序注册了 JBDC 驱动程序 [oracle.jdbc.driver.OracleDriver],但在 Web 应用程序停止时无法取消注册。为了防止内存泄漏,已强制取消注册 JDBC 驱动程序。
任何帮助表示赞赏。
从版本 6.0.24 开始,Tomcat 附带了内存泄漏检测功能,当 web 应用程序中存在 JDBC 4.0 兼容驱动程序时,这可能会导致出现此类警告消息/WEB-INF/lib
哪个自动寄存器在 webapp 启动期间使用ServiceLoader API,但它并没有自动注销webapp 关闭期间自身。此消息纯粹是非正式的,Tomcat 已经采取了相应的内存泄漏预防措施。
你能做什么?
-
忽略这些警告。 Tomcat 正在正确地完成其工作。实际的错误是在其他人的代码(有问题的 JDBC 驱动程序)中,而不是在您的代码中。很高兴 Tomcat 正确完成了它的工作,并等待 JDBC 驱动程序供应商修复它,以便您可以升级驱动程序。另一方面,您不应该在 web 应用程序中删除 JDBC 驱动程序/WEB-INF/lib
,但仅在服务器中/lib
。如果你仍然把它保留在webapp的/WEB-INF/lib
,那么您应该使用手动注册和注销它ServletContextListener
.
-
降级到 Tomcat 6.0.23 或更早版本,这样您就不会被这些警告所困扰。但它会默默地不断泄漏内存。不确定知道这是否有好处。这些类型的内存泄漏是背后的主要原因之一OutOfMemoryError issues在 Tomcat 热部署期间。
-
将 JDBC 驱动程序移至 Tomcat 的/lib
文件夹并具有连接池数据源来管理驱动程序。请注意,Tomcat 的内置 DBCP 在关闭时无法正确取消注册驱动程序。另请参阅错误DBCP-322它被关闭为 WONTFIX。您宁愿用另一个比 DBCP 更好的连接池来替换 DBCP。例如HikariCP也许Tomcat JDBC 池.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)