1

私の Web アプリケーション アーキテクチャは、Apache 2 (ロード バランサとして) + JBoss 3.2.3 + MySQL 5.0.19 です。

したいこと: JBoss サーバーのみで費やされた (つまり、Web およびデータベース サーバーで費やされた時間を除く) 要求処理時間を (個々の要求ごとに) 測定します。

アプリケーション層のみでリクエスト処理時間をログに記録する方法について調査してきました。*mod_JK ロギング*、*Apache の mod_log_config*、Tomcat AccessLogValveの 2 つの方法が考えられます。

*mod_JK ロギング* の使用: 私の理解では、mod_jk ロギングは各リクエストのリクエスト処理時間を提供し、リクエストが Apache サーバーを離れた時間と、対応する応答が Apache サーバーによって受信された時間との時間差として計算されます。これが正確でない/正しくない場合は、修正してください。

Apache の mod_log_config モデル ( http://www.lifeenv.gov.sk/tomcat-docs/jk/config/apache.html ) を使用: LogFormat (JKLogFile コンストラクト) コンストラクトに「%{JK_REQUEST_DURATION}n」を追加することにより (上記リンク)。「JK_REQUEST_DURATION」は、Apache の観点から Tomcat の全体的な処理時間をキャプチャします。

時間 (上記の場合) には、Tomcat/JBoss + MySQL の処理時間が含まれます。MySQL の処理時間が含まれているため、私の場合は役に立ちません。リクエストの処理時間を JBoss のみで記録したいのです。提案やアイデアをいただければ幸いです。

AccessLogValveの使用: AccessLogValve XML コンストラクトの pattern 属性に %D を設定することにより、「リクエストの処理にかかった時間 (ミリ秒)」をログに記録できます。これかどうかはあまり明確ではありません

  • この時間が tomcat/JBoss が要求を処理するのに必要な時間である場合の時間 (たとえば、それを処理するためにスレッド ワーカーを割り当てる)
  • リクエストを処理してデータベース サーバーに送信するのにかかった時間 (Tomcat/JBoss サーバーでの全体の時間)
  • Tomcat/JBoss によるリクエストの処理と Web サーバー/クライアントへのレスポンスの送信にかかった時間

アイデア/手がかりはありますか?

これは、共有したい私の経験/研究です。誰かが同様の問題を抱えている/それを行う方法を知っている場合は、より良い解決策が見つかる経験/ポインター/考えを共有していただければ幸いです。

あなたの考え/提案を楽しみにしています

4

2 に答える 2

0

Java visualVM、JProfilerなどのプロファイリングツールを探していると思います。

于 2012-03-12T18:49:32.340 に答える
0

なぜデータベース時間を除外したいのですか? データベースで費やされた時間は、アプリケーションが待機している時間であり、他のリソース (lucene インデックス作成の完了、リモート http リクエストの完了など) を待機している場合とまったく同じです。

データベースへのアクセス時間を本当に除外したい場合は、タイマーの開始/停止命令を使用してアプリケーションを計測する必要があります。これは間違いなくアプリケーション内に入る必要があり (AOP を介して「きれいに」、またはアプリの重要なポイントで start/stop ステートメントを介して手動で)、単純に外界からの構成 (Apache モジュールなど) にすることはできません。

そのため、処理チェーンの一番最初にリクエストを受け取ったときにタイマーを開始し (ここではフィルターがうまく機能します)、クエリを送信するたびにタイマーを停止する必要があります。次に、クエリの直後にもう一度開始します。もちろん、特に hibernate などの透過的な ORM を使用する場合は、これが 100% 完了するわけではありません。これは、クエリを間接的に実行している場合があるためです。つまり、プレーンな Java を介してコレクションまたは関連付けをトラバースする場合などです。

于 2011-11-05T07:09:11.130 に答える