12

背景:我正在将我的应用程序从 npgsql v1 移动到 npgsql v2.0.9。运行我的应用程序几分钟后,我得到一个 System.Exception: Timeout while getting a connection from the pool。

网络声称这是由于连接泄漏(打开数据库连接,但没有正确关闭它们)。

所以

我正在尝试诊断 npgsql 中泄漏的 postgres 连接。

来自各地的各种网络文学;诊断泄漏连接的一种方法是在 npgsql 上设置日志记录,并在日志中查找泄漏连接警告消息。问题是,我在任何地方的日志中都没有看到此消息。

我还发现了监视 npgsql 连接的实用程序,但它不稳定并且崩溃。

所以我只能手动检查代码。对于每个创建 npgsql 连接的地方,都有一个 finally 块处理它。对于每个打开数据读取器的地方,都会使用 CommandBehavior.CloseConnection(并且会释放数据读取器)。

还有其他地方可以检查或有人可以推荐一种方法来查找泄漏的池连接吗?

4

1 回答 1

7

更新:我正在以更好的方式检查这些泄漏连接的分配位置。请检查我的帖子:http: //fxjr.blogspot.com/2012/11/better-tracing-of-npgsql-connection.html 我希望它有所帮助。

编辑:您可能想尝试我们最新的测试版 2.0.11.91。我们添加了更多代码来改进可以帮助您的连接池。

嗯,这很奇怪......你应该收到一些消息。

但是,这些消息仅在 ms.net 运行时最终确定对象时出现。您是否有可能同时使用超过默认的最大连接数?我的意思是,您的峰值使用量可能超过 20 个最大连接数...

我希望它有所帮助。

请让我知道你得到了什么。

于 2010-05-05T18:18:14.173 回答