ADO.Net连接池已达到最大池大小

5
我继承了一个 .net/web 服务项目,它存在严重的连接对象泄漏问题。奇怪的是,直到最近,这个项目一直在生产中运行没有问题。我想垃圾回收器通常会快速清理它们。但是,在一个客户站点的一个 web 服务器在负载较重时开始耗尽连接。

显然,解决方案是修复所有的连接泄漏问题,但这不会很快发生。我甚至不能更改连接字符串中的最大池设置,因为连接字符串是由应用程序动态构建的。这需要进行代码更改,而这需要经过一个不快速的过程。

在代码更改发生之前,我能在服务器上做些什么来缓解这个问题吗?

为什么这只是在一个位置出现问题,而且还是一个较小的位置?如果我知道这个问题的答案,我可能能够找到一个临时的解决方法。

实际上,问题可能是其他完全不同的问题,导致了连接池问题吗?例如,也许服务器上的负载均衡出了问题或者有错的 web 服务器正在出现问题。

3个回答

5

解决问题的一个快速方法是增加连接字符串中的池大小。在字符串中添加该属性 Max Pool Size=1000,使其看起来像是这样

Data Source=server;Initial Catalog=db;User ID=user; Password=pwd;Max Pool Size=1000

3

如果您正在使用 IIS 6 或更高版本(我认为是的),则可以按计划强制应用程序池进行回收。我曾经使用过远程应用程序,该应用程序未关闭与 Oracle 数据库的连接,因此我们将对象放入了自己的应用程序池中,然后将其设置为每小时回收一次。在我们解决问题并发布修复程序的几个月内,这个方法一直有效。


0
请确保在任务完成后关闭所有连接。

我认为你的意思是“在任务完成后关闭所有连接”。 - Germstorm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接