4

Tomcat には、リクエストを高速化するためのデータベース接続プール (DBCP) があります。

私のアプリでは、あまりにも多くの接続が長時間使用されています。リーク (接続が適切に閉じられていない) が疑われ、リークの場所を特定する必要があります。

質問: 接続を使用している各スレッドの名前を見つける方法は?

できればライブ JMX MBean ですが、他のヒントも歓迎します。各スレッドのスタック トレースまたはクラス名を表示することも許容されます。

注: DBCP 設定を表示する MBean を探しているわけではありません。各接続を使用するものを確認したい。

4

2 に答える 2

8

クリストファーの答えにヒントを得て、借用/解放された接続を監視するツールを作成しました。

https://github.com/nicolas-raoul/Commons-DBCP-monitoring

Commons DBCP の使用状況を監視し、そのようなグラフを作成できるようにします。

ここに画像の説明を入力

ここに画像の説明を入力

どのスレッドが接続を長時間保持しているかを非常に簡単に特定できます。

于 2012-08-06T05:58:08.107 に答える
8

残念ながら、そのような Bean は存在しません。

できることは、DBCP 構成で設定を有効にすることです。logAbandoned詳細については、Apache Commons-DBCP ( http://commons.apache.org/dbcp/configuration.html<Resource> ) のドキュメントを参照してください。Tomcat の要素でそこにあるすべての構成オプションを使用できます。

logAbandonedタイムリーに返されなかった接続がプールからチェックアウトされた場所がわかります。これは、接続リーク、または実行時間の長いクエリを示している可能性があります。

2015年12月15日更新

Tomcat のを使用すると、 SlowQueryReporttomcat-poolなどのインターセプターをアタッチしたり、JMX 経由で通知を取得したりするには、 SlowQueryReportJmxを使用したりできます。

これらのツールは、Apache Commons-DBCP から取得できるより基本的な情報よりも優れた機能を発揮する可能性があります。

于 2012-07-09T14:06:08.833 に答える