12

背景:アプリケーションをnpgsqlv1からnpgsqlv2.0.9に移動しています。アプリケーションを数分間実行した後、System.Exception:プールから接続を取得中にタイムアウトが発生します。

Webは、これは接続のリークが原因であると主張しています(db接続を開いていますが、正しく閉じていません)。

それで

npgsqlでリークしているpostgres接続を診断しようとしています。

周りのさまざまなウェブ文献から; リークしている接続を診断する1つの方法は、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 に答える