5

希望有人可以在这里帮助我。

我们使用 Tridon CMS 来管理托管在 jBoss 和 Apache 上的网站。

我们已经使用 SDL Tridion 5.3 5 年了,突然我们遇到了它背后的 Oracle 数据库的错误。我们的大部分内容作为来自文件系统的普通 jsp 页面提供,但我们有一些组件通过调用 Tridion 的 Java API 提供服务,该 API 从 Oracle 数据库返回一个 html 片段。
最近我们注意到其中一些 html 片段没有被提供,并且在检查服务器日志文件时我们发现 Oracle 错误ORA-01000: maximum open cursors exceeded正在生成。
我们的最大光标设置为 300,因此我们将其增加到 350 以查看是否有帮助,但没有。
监视活动的 Oracle 会话,我们可以看到许多会话已达到最大游标,因此我们重新启动了应用服务器。这似乎有所帮助,但只是暂时的。达到最大游标阈值的会话数再次逐渐增加。昨天下午重启后不久,大约有 30 个最大游标的会话,今天早上是 150 个。

显然,最近发生了一些变化,导致了这种情况,但我们不确定是什么。Oracle 数据库不是我们通常可以访问的东西,当然也不是我们直接更改的东西——所有日常数据库操作都是通过 Tridion API 发生的。就 Tridion 开发和发布而言,我们没有做任何不寻常的事情,因此与我们过去几年在那里所做的没有什么不同。我们网站的流量目前相对较低(过去明显更高),所以我们很确定那里没有问题。

我刚刚被告知可能会或可能不会连接的一件事 - 在问题出现之前不久,我们的一个内部防火墙发生故障,但我们想不出一种方法可能会导致我们看到的问题。除了防火墙故障转移,我们找不到应用服务器和数据库之间连接的任何其他更改。

有人对我们可以在哪里寻找解决方案有任何建议吗?我们刚刚向 SDL 开了一张支持票,但目前他们和我们一样困惑。

谢谢。

4

2 回答 2

7

我们过去在使用 IBM WebSphere 时遇到过类似的问题。在我们的场景中,问题的根本原因是由于防火墙的超时时间低于 AppServer 连接清理超时时间,导致空闲或陈旧连接的防火墙超时,并丢弃了应用程序服务器和 DB 之间的连接。

首先检查一下并确保这不是根本原因可能是值得的,因为我们花了很多时间分析应用程序日志和 Tridion api 等,所以我们花了一段时间才弄清楚这一点。我假设 jBoss 有类似的像 WebSphere 这样的设置。

我们实施的解决方案是Unused Timeout在防火墙上设置低于超时设置。这使 WebSphere Application Server 可以在防火墙丢弃未使用的连接之前清理它们。

于 2012-08-17T13:22:03.113 回答
4

我不确定 SDL Tridion R5.3,但在 2011 SP1 中存在一个已知问题,即当未明确关闭 ResultSets 时,使用 JNDI(我相信与 WebSphere 结合)会使游标保持打开状态。

解决方案很简单,正如 Oracle 文档所述,增加允许的游标数量,或者如果您一直遇到您所说的问题,您可能会考虑不使用 JNDI。如果可能,您可以检查自己的代码以正确关闭 ResultSets(根据 JavaDoc for ResultSet:: 这不是必需的,尽管这似乎仅在不使用 JNDI 时才是正确的;使用 JNDI 时似乎会留下游标打开)。

于 2012-08-17T10:09:31.273 回答