1

CMT を使用した EJB RESTEasy コントローラーがあります。

DB にいくつかのエンティティを作成する 1 つの重要な方法は、1 回の呼び出しで問題なく迅速に機能します。

しかし、10 人のユーザーが同時に呼び出そうとすると、動作が非常に遅くなります。

ログで時間を追跡しましたが、最も拡張された場所と単一の呼び出しは、RESTeasy コントローラーから終了してから MainFilter に入るまでのラグです。

したがって、この遅延は、1 回の呼び出しで 0 ~ 1 ミリ秒から 8 秒に増加します。10回同時発動!

何が原因で、どうすればそれをスピードアップできるかについてのアイデアが必要です。

4

3 に答える 3

0

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

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

キーのテーブルや親レコードなど、問題の原因となっている可能性のある更新中のリソースがあるかどうかを確認してください。

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

于 2009-06-15T09:24:48.567 に答える
0

私の即座の反応は、これはデータベースのロックの問題だということです。制御の流れがトランザクション境界を通過するときに遅延が発生するかどうかわかりますか? コードに print ステートメントを散りばめた古い手法を試して、いつ停止するかを確認してください。

于 2009-06-15T07:18:54.190 に答える