根据这个helpful article我已经确认我在运行W2k3的IIS 6服务器上的某个应用程序中有连接池泄漏。
困难的部分是我在这个服务器上为6个应用程序池中的700个开发人员编写了300个网站,其中50%是.NET 1.1,甚至在CLR Data性能计数器中都没有显示连接。如果一切都是.NET 2.0+,我可以看到我的终端连接增长,但我甚至在这个苗条的监控工具上运气不好。
我的300个网站连接到大约100多个分布在Oracle,SQLServer和异常值之间的数据库,所以我也无法从数据库端看到连接。
现在我最好也是唯一的计划是对我最糟糕的罪犯进行宽松的二元搜索。我会杀死应用程序池并慢慢从它们中删除应用程序,直到我发现当我杀死它们的池时,哪些单独的应用程序导致最多的连接丢失。但由于这是一个生产箱,我喜欢继续就业,这可能需要几周时间作为追踪方法。
有没有人知道如何询问IIS连接池以了解其来源或所有者?是否有一个MSMQ触发器,我可能能够在创建它时附加它?我有点傻吗?
凯文
(我将包含错误代码,以方便其他人通过搜索找到您的答案: 例外:System.InvalidOperationException 消息:超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。)
答案 0 :(得分:1)
答案 1 :(得分:0)
Todd Denlinger写了一个很棒的课程http://www.codeproject.com/KB/database/connectionmonitor.aspx,它可以观察Sql Server的连接并报告一段时间内没有妥善处理的连接。将它连接到您的站点,它会在发生泄漏时通知您。