为了防止内存泄漏,JDBC驱动程序被强制取消注册

问题:

当我运行我的Web应用程序时,我收到此消息。它运行正常,但我在关机期间得到这个消息。

严重:Web应用程序注册了JBDC驱动程序[oracle.jdbc.driver.OracleDriver],但在Web应用程序停止时未能注销它。为了防止内存泄漏,JDBC驱动程序被强制取消注册。

任何帮助赞赏。

回答:

自6.0.24版本以来,Tomcat附带了memory leak detection功能,而在webapp的启动过程中,如果webapp的/WEB-INF/lib中有JDBC 4.0兼容的驱动程序自动registers,则可能会导致此类警告消息。 ServiceLoader API,但在webapp关闭期间本身没有自动deregister。这个消息纯粹是非正式的,Tomcat已经相应地采取了内存泄漏预防措施。
你能做什么?

  1. 忽略这些警告。 Tomcat正在努力工作。实际的错误是在别人的代码(有问题的JDBC驱动程序),而不是在你的。很高兴Tomcat正常工作,等待JDBC驱动程序供应商修复,以便您可以升级驱动程序。另一方面,您不应该在webapp的/WEB-INF/lib中删除JDBC驱动程序,而只能在服务器的/lib中删除JDBC驱动程序。如果您仍然保留在webapp的/WEB-INF/lib中,那么您应该使用ServletContextListener手动注册和注销它
  2. 降级到Tomcat 6.0.23或更旧版本,这样你就不会被这些警告打扰了。但它会默默地保持泄密的记忆。不知道这是否真的很好知道。这些内存泄漏是Tomcat热门部署过程中OutOfMemoryError issues背后的主要原因之一。
  3. 将JDBC驱动程序移动到Tomcat的/lib文件夹,并具有连接池数据源来管理驱动程序。请注意,Tomcat的内置DBCP没有在关闭时正确注销驱动程序。另请参见作为WONTFIX关闭的错误DBCP-322。您更希望使用另一个连接池来替换DBCP,该连接池比DBCP更好。例如HikariCPBoneCP或者Tomcat JDBC Pool

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: To prevent a memory leak, the JDBC Driver has been forcibly unregistered

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1 + 9 =