2009-06-15 5 views
1

私はCMTを備えたEJB RESTEasyコントローラを持っています。RESTeasyコントローラからの退出とMainFilterへの入力の間に大きな遅れが生じる理由

DBにいくつかのエンティティを作成する重要な方法の1つは、1回の呼び出しですばやく素早く動作します。

しかし、私は同時に10人のユーザーがそれを呼び出すとき、非常にゆっくりと動作します。

私はログで時間を追跡しました。単一の呼び出しに対して最も拡張された場所は で、RESTeasyコントローラからの出口とMainFilterへの入力の間に遅れています。

このラグは、1回の呼び出しで0-1msから8秒に増加します。同時10回の呼び出しで!

私はアイデアが必要な理由があり、どのようにスピードアップできるのでしょうか。

答えて

0

私の直ちに反応は、それがデータベースのロック問題です。コントロールの流れがトランザクション境界を通過するときに遅延が発生するかどうかを確認できますか?何かが止まるときを見るために、printステートメントでコードを捨てるという古いテクニックを試してみてください。

+0

RESTeasy Beanを終了した後、MainFilterに入る前にログを記録する可能性のある場所は何ですか? – artemb

+0

データベースロックの問題を検出するツールはありますか?トランザクションのコミット後に遅延が発生するかどうかを確認する方法は?私もその問題に興味があります。 – artemb

+0

これは扱いにくい問題であり、データベースに非常に依存しています。各データベース操作の前と後、および各クラスの開始時と終了時にスティッキングロギングステートメントを試してください。 1つのコンポーネントの終わりから別のコンポーネントの開始までの間に遅延が発生すると、おそらくアプリケーションサーバー内で発生している可能性があり、データベース/トランザクションのロギングをより可能にします。 – skaffman

0

resteasyスレッドに対するロックの競合?データベース?ボトルネックがどこにあるかを予測することは非常に困難です。

0

上記のコメントのいくつかによると、データベースロックの問題のように聞こえます。あなたが言ったことから、コントローラとコントローラを呼び出すフィルタとの間に「遅れ」が発生します。おそらくトランザクションコミットが発生している場所です。

しかし、コードではデータベースにいくつかのエンティティが作成されていますが、コードが更新や選択を行うかどうかはわかりません。関連する更新や選択(Oracleでの更新の選択)がない限り、挿入を行うだけで通常はほとんどのデータベースでロックの問題が発生しません。

問題を引き起こしている可能性のあるキーのテーブルや親レコードなどのリソースがあるかどうかを確認してください。

また、JDBCのマニュアルも確認してください。ほとんどのJDBCドライバには、データベースで実行されている操作を表示できるようにするログレベルがあります。これにより大量のログが生成される可能性がありますが、ログにスレッドIDを含めると、問題の発生場所を確認できるはずです。

関連する問題