2

複数の場所で Web アプリケーションを実行している場合
、Linux で次のコマンドを実行すると、多くの接続が積み重なっていることがわかります。

ps -ef|grep LOCAL

は、プロセス ID を持つアクティブなオラクル接続の数を示しており、接続数は 1 時間ごとに 5 ~ 7 ずつ増加しています。数時間後、アプリケーションの速度が低下し、最終的に tomcat サーバーを再起動する必要があります。

接続が成長しているのを見ることができるので、これらの接続のソースを取得して、どのクラスまたはオブジェクトがこれらのレイアップされた接続を作成したかを調べる方法はありますか?

また、Tomcat 接続プーリングを使用していません。kill -3 tomcat pid を発行してスレッド ダンプを生成しようとしましたが、理解できないため、スレッド アナライザーを試しても役に立ちませんでした。

これらのレイアップされた接続に関連付けられたオリジネーター クラスを取得して、Tomcat 機能を使用するか、その他の方法で小さなヒントを取得する簡単な方法はありますか?

4

3 に答える 3

3

JProfilerでは、JDBC プローブを使用して、接続を開いたスタック トレースを取得します。タイムラインで接続を選択します

ここに画像の説明を入力

イベントビューにジャンプします

ここに画像の説明を入力

ここで、「接続が開かれました」イベントを選択できます。下のペインに、関連するスタック トレースが表示されます。

免責事項: 私の会社は JProfiler を開発しています

于 2013-01-17T09:36:49.497 に答える
1

javax.sql.DataSource.getConnection()IDEの使用法を検索できます。

デバッグモードでtomcatを起動すると、接続クラスのインスタンスを探すことができます(そしてそれらが増加するのを見ることができます)。また、コンストラクターにブレークポイントを設定すると、作成時にそれらがキャッチされます。

しかし、実際には接続プールを使用する必要があります。それはあなたの問題に対する最も簡単な解決策です。

于 2013-01-16T10:57:25.313 に答える
0

おそらく、これら 2 つのツールは、サーバー アプリケーションのパフォーマンスを低下させている原因を特定するのに役立ちます。

jmeter

ab ベンチマーク ツール

いくつかの単純な実装上の問題も原因で、パフォーマンスが低下した可能性があります。Web アプリケーションの IO の代わりに NIO (バッファ指向、ノンブロッキング IO) を使用したい場合もあれば、多くの文字列連結を行っている場合もあります (StringBuffer を使用)。

于 2013-01-16T10:58:41.770 に答える