【问题标题】:Connection pool is full连接池已满
【发布时间】:2017-07-15 17:41:57
【问题描述】:

在我的 IIS 服务器中,我有许多应用程序池(例如 6 到 7 个),并且每个应用程序池上运行着许多 ASP.NET 应用程序(例如,每个池有 25 个应用程序)。它们都使用ADO.NET与Oracle数据库连接。

所有应用程序都运行良好,但有时我们会收到类似的错误

超时。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。

我知道这种情况的可能性,例如我们没有正确关闭数据库连接。所以这是我的头痛......我不想去每个项目看看我们忘记关闭连接的地方,这对我们来说是非常耗时的任务。

那么有什么方法可以确定哪些应用程序连接保持打开状态?我们可以从 IIS 本身看到吗?我们可以制作某种实用程序来跟踪哪个项目连接保持打开状态吗?

【问题讨论】:

  • 您能否提供准确的错误/异常文本?
  • 嘿,laylarence,感谢您的回复,我们收到类似“超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中且池最大大小已到达。”
  • 这篇文章详细介绍了如何观察打开的连接:stackoverflow.com/questions/1043096/…
  • 恐怕您只需要检查一下您是否在任何地方都错误地处理了您的连接。这就是为什么集中您的数据访问、尽可能多地抽象出重复的逻辑并验证您在必须实际访问数据库的地方正确处理它们如此重要的原因。通过检查打开的连接,您也许可以猜出错误代码在哪里……但很可能需要大量的侦探工作。
  • 大家好,请给我一个最好的方法来缩短它。

标签: asp.net c#-4.0 ado.net iis-7.5


【解决方案1】:

我不确定这是与数据库连接的问题。我认为您的应用程序没有处理上下文,那么垃圾收集器就无法清除内存。您可以尝试减少回收应用程序池的时间,然后检查您的内存使用量是否正在减少。

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 2012-09-29
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多