0

我们的 Tomcat 和 webapps 日志中有一个神秘的错误。Java Web 应用程序在 Tomcat 6 上运行,使用 Oracle 11g 数据库。记录所有请求。我们使用 Commons DBCP 进行数据库连接池。我们应用程序的一个特点是所有连接都是请求范围的。我们使用 Spring 的 SmartDataSource 实现了这一点。释放连接被包裹在 try/finally 中,因此即使请求过程中出现错误,连接也会被释放。这在我们测试它的整个过程中运行良好。

有一天,我们的服务器返回错误 503“服务不可用”。在日志中我们只发现了一个异常:org.apache.commons.dbcp.AbandonedTrace$AbandonedObjectException. 所以看来Common DBCP废弃连接收集器发现了一个废弃的连接并报告了。它本身不是错误,它暗示错误在其他地方。

跟踪告诉我们获取连接的确切时间和代码。我们在日志中探索了那个时间,并且有一个请求开始但从未结束。这可以解释为什么连接没有被释放,但困扰我们的是 try/finally 是如何被突然中断的?

我认为这是一个 Tomcat 问题,因为我们的应用程序日志中没有其他异常,并且服务器返回的错误代码不是通常的错误 500“内部服务器错误”。

有没有人有任何建议为什么会发生这种情况?Tomcat可能会中断一个线程,从而忽略try/finally?

4

0 回答 0