1

これは設計上の問題です。同時ユーザー数、テストの実行時間、およびヒットする URL のリストを指定できる Java で http ロード ジェネレーターをどのように設計しますか。

some_load_generator -users n1 -time n2 -urls some_file_name.txt

プログラムが起動し、ユーザー数で指定された数のスレッドが作成され、すべてのスレッドが URL ファイルからランダムな URL を読み取り、GET 要求を行います。すべてのリクエストについて、各スレッドは GET リクエスト全体を完了するのにかかった時間を記録します。このプログラムは、5 秒ごとに、これまでにすべてのスレッドによって行われたすべての要求の最小、最大、および平均時間を出力します。

スレッドを作成し、最小、最大、平均の情報を保存し、その情報を 5 秒ごとに出力するにはどうすればよいでしょうか。

これが私がこれまでに考えたことです:

  1. プログラムは、ユーザー数に対応する新しい固定スレッド プール エグゼキューターを作成します。これには、スレッドのライフサイクル管理が必要です。

  2. Runnable 実装は、ファイルから 1 行を読み取り、GET 要求を行い、かかった時間を記録します。

  3. 私の主な問題は、これらの変数へのアクセスを同期する必要があるため、すべてのスレッドで最小、最大、および平均を効率的に計算する方法です。

  4. 5 秒ごとに統計を出力するために、起動して統計を表示し、スリープ状態に戻るタイマー タスクを使用します。ここでの主な問題は、タイマー タスクを効率的にスケジュールする方法です。これは、このスレッドが統計を出力しようとしている間に、統計の状態を更新しようとするスレッドが多数あるためです。他のスレッドと比較してこのスレッドの優先度を上げることができるので、実行中に優先されます。

4

2 に答える 2

0

ApacheJMeterをチェックしてください。Aggerate Reportは、必要な統計を提供します。

于 2012-11-21T18:31:46.313 に答える
0

スレッドがこのデータを一種のアグリゲーターに送信し、統計プリンターがここからデータを取得するのはどうですか?

このようにして、各スレッドが終了する直前に、アグリゲーターで必要なメトリックを更新し、統計プリンターが実行中のスレッドに干渉する必要がなくなりますか?

リモートロギングのようなものです。したがって、各スレッドは必要なことを行い、終了する直前にアグリゲーターにかかった時間を送信すると、プリンターは N 秒ごとにデータを印刷しますが、スレッド自体ではなくアグリゲーターから取得します (一種の必要に応じてバッファーのように)。

于 2012-11-21T18:23:38.553 に答える