3

Oracle DB を多用し、数百人の同時ユーザーをサポートし、過去 10 年間に数十人の開発者が関わってきたエンタープライズ Java プロジェクトがあります。ときどき、開発者は Connection、PreparedStatement、または ResultSet オブジェクトのいずれかを閉じるのを忘れます。ユーザーが 1 日を通してシステムを使用すると、Oracle が「Max Open Cursors」エラーをスローするまで、開いている接続が追加されます。DB 内の最大オープン カーソル値を、快適に感じる値まで増やしました。

数千行のJavaコードをスキャンして、これらのDBオブジェクトが開いたままになっているすべての場所を見つけるためのソフトウェアまたは技術はありますか? 1 回実行して現在のすべての場所を検索し、定期的に新しい場所を検索します。前もって感謝します。

4

4 に答える 4

3

ソースコードに対してFindBugsを実行してみてください。これにより、閉じられていない接続が検出されます。ここに見つかったバグのリストがあります:

http://findbugs.sourceforge.net/bugDescriptions.html

ODR で始まるものを探します。

于 2012-11-20T14:13:17.897 に答える
1

ConnectionPooling メカニズムを使用しているかどうかによって異なります。その場合、接続プールは開いているすべての接続をチェックします。独自のプールを実装している場合は、コードを見直してこのチェックを組み込む必要があります。

于 2012-11-20T14:14:21.347 に答える
0

FindBugsには、このための「バグ パターン」がいくつかあります。

http://findbugs.sourceforge.net/bugDescriptions.html#ODR_OPEN_DATABASE_RESOURCE http://findbugs.sourceforge.net/bugDescriptions.html#ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH

于 2012-11-20T14:15:55.447 に答える
0

Findbugsは、適切に閉じられていない接続やその他の多くの問題を検出するのに優れています。

これは、「サイト」ゴールで呼び出される maven プラグインとして使用します。継続的インテグレーション ツール (Jenkins など) と組み合わせると、このような潜在的な問題を検出するプロセスが自動化されます。

于 2012-11-20T14:17:57.627 に答える