ここからバイナリをダウンロードしてください。また、私たちを引用することを検討してください。
HTTPロードジェネレーターは、さまざまな負荷強度を備えたHTTP負荷を生成するように設計されたロードジェネレーターです。 Limboで指定された荷重強度仕様を使用して、時間の経過とともに強度(1秒あたりの要求数)が異なる負荷を生成します。ロードジェネレーターはアプリケーションレベルのデータをログに記録し、外部電力測定デーモンに接続することをサポートします。実行時に読み取られるLUAスクリプトを使用して、HTTP要求自体を指定します。
HTTPロードジェネレーターツールは、ディレクターとして、およびロードジェネレーターとしての2つのモードで実行できます。ディレクターモードは、必要なプロファイルとスクリプトを解析し、電源測定デバイスに接続し、データを収集するモードでツールを開始します。ロードジェネレーターモードは、ディレクターから指示を受信し、実際のリクエストを生成します。モードはコマンドラインスイッチを使用して設定されています。つまり、HTTPロードジェネレーターの少なくとも2つのインスタンスがテストのために実行されている必要があります。 HTTPロードジェネレーターは、マルチノードロード生成もサポートします。ここでは、1人のディレクターがロードジェネレーターモードで実行されている複数のインスタンスに接続します。
このreadmeの構造:
負荷ジェネレーターには、次の3つの主要な機能があります。
ロードジェネレーターは、エネルギー効率のテスト、時間の経過に伴うスケーリング挙動のテスト、および突然のバーストの影響、リクエストパターンの季節変動、トレンドなどの時間依存シナリオのテストに関するWebアプリケーションのテストに使用できます。
最初にhttploadgenetor.jarをビルドまたはダウンロードします。 2つのマシンにhttploadgeneratorを展開します。
JARに加えて、実際のリクエストを生成するための負荷強度プロファイルとLUAスクリプトが必要です。 ExampleFilesディレクトリのそれぞれの例を提供します。
両方のファイルをダウンロードして、ディレクターマシンに配置します。簡単にするために、 httploadgenerator.jarと同じディレクトリに配置すると想定します。また、Webアプリケーションの呼び出しでLUAスクリプトを変更します。最小限の例については、index.htmlとindex.htmがアクセス可能であることを確認し、スクリプトの7行目でWebアプリケーションをホストするサーバーのアドレスを入力してください。
次に、ロードジェネレーターマシンで、 -Lスイッチを使用して次のコマンドラインを使用して、ロードジェネレーターモードでHTTPロードジェネレーターを開始します。複数のロードジェネレーターマシンを使用する場合は、それぞれでこれを行います。
$ java -jar httploadgenerator.jar loadgenerator
次に、ディレクターマシンで、ディレクターモードでHTTPロードジェネレーターを開始します。
$ java -jar httploadgenerator.jar director --ip IP_OF_THE_LOAD_GENERATOR_MACHINE --load curveArrivalRates.csv -o testlog.csv --lua http_calls_minimal.lua
ディレクターコールは次のことを行います。
directorディレクターモードを開始します。--ipロードジェネレーターマシンのアドレスを指定します。複数のロードジェネレーターには、コンマデリミッター(白いスペースなし!)を使用してください。--load荷重強度(到着率)プロファイルを指定します。-o結果を含むO UTPUTログの名前を指定します。--luaはL UAスクリプトを指定します。ディレクターは、ロードジェネレーターに接続し、負荷強度プロファイル、スクリプト、およびその他の設定を送信します。その後、Enterを押してテストを開始するように求められます。テストが終了すると、出力ログファイルがディレクトリに表示されます。
あなたは常に私たちのサンプルプロファイルを実行したいとは限らないので、あなたはあなた自身を指定することができます。荷重強度(到着率)とリクエストを別々のファイルで指定します。
負荷強度プロファイルを作成する最も簡単な方法は、Limboツールを使用することです。 Limboは、到着率をモデル化するためのEclipseプラグインです。グラフィカルエディターを使用して到着率をモデル化し、さまざまな形式にエクスポートできます。 HTTPロードジェネレーターは、これらの形式のうち2つをサポートしています。
この形式のファイルを取得するには、Eclipseパッケージエクスプローラーの.dlimモデルのファイルを右クリックし、 [タイムスタンプの生成]を選択します。エクスポートオプションを含むダイアログが表示され、2つのサポートされているオプションがその中にあるはずです。次のダイアログでは、サンプリング間隔を選択することができます。これは、リムボが到着率をサンプリングする間隔であり、HTTPロードジェネレーターが到着率を再調整して結果を報告する間隔でもあります。自由に構成できますが、1の間隔を推奨します。
Limboを使用したくない場合(ただし、そうすべきです)、到着率を手動で識別することもできます。ファイルの形式は単純なCSV形式であり、最初の列は各スケジューリング間隔の中間スタンプであり、2番目の列は負荷強度です。間隔は常に同じステップを持っている必要があります(たとえば、常に1による増加)、スキップしないことができます!
例:
0.5,10
1.5,20
2.5,30
タイムスタンプは常に間隔の中央にあることに注意してください。つまり、0、1の代わりに0.5、1.5、... ...これは、この設計上の決定がより理にかなっているリンボとの互換性のためです。繰り返しますが、1秒(0.5、1.5、2.5、...)の間隔が推奨されます。
リクエストは、LUAスクリプトを使用して指定されます。最小限の例やDell DVDストアの例など、例の1つを変更することをお勧めします。例には、コードコメントの説明が含まれています。
スクリプト内の2つのLUA関数は、HTTPロードジェネレーターから呼び出されます。
正規表現を使用して、 oncall関数のHTTP応答を解析できます。 HTMLヘルパー関数を提供します(通常、応答がHTMLであることを考慮します)。具体的には、以下を提供します。
すべての正規表現は、Javaバックエンドに直接渡されることに注意してください。 Javaコードで直接指定されているかのように、それらを指定する必要があります。つまり、単一の「」の代わりに「\」を使用します。
Oncallによって返されるURLは、HTTP GETを使用して呼ばれます。 HTTP POSTリクエストを送信するには、返されたURLの前に[POST](括弧を含む)をPrepEnd [POST] (ブラケットを含む)。
HTTPスクリプトテスターを使用してLUAスクリプトをテストできます(こちらからバイナリをダウンロードしてください)。 HTTPスクリプトテスターは、スクリプトを実行し、グラフィカルなWebビューでHTML応答をレンダリングするグラフィカルアプリケーションであり、スクリプトの正しい機能をチェックします。グラフィカルユーザーインターフェイスを使用するか、次のコマンドラインを使用してスクリプトテスターをLauchします。
$ java -jar httpscripttester.jar ./MYSCRIPTFILE.lua
バックグラウンドのコマンドラインには潜在的なエラーとLUAの印刷ステートメントが表示されるため、コマンドラインLauchをお勧めします。これは、デバッグ時に非常に役立ちます。
HTTPロードジェネレーターは、パワーアナライザーDaemonsに接続することをサポートします。インフラストラクチャの背後にある一般的なアイデアは、パワーアナライザーを使用して別のマシンで実行される可能性のあるネットワークデーモンに接続することです。残念ながら、Spec PtdaemonなどのほとんどのパワーアナライザーDaemonsには、HTTPロードジェネレーターでの使用を禁止したり、私たちがあなたに提供することを妨げたりする制限ライセンスがあります。
Tools.descartes.dlim.httploadgenerator.powerパッケージにIpowercommunicatorインターフェイスを提供します。このインターフェイスに対して独自のパワーデーモンコミュニケーターを実装します。 hiokicommunicatorは、イーサネット対応のhioki電源測定デバイスをサポートする機能する参照実装です。 TMCTLDCommunicatorは、さらに実装の例として使用できます。
Power Communicatorを使用してHTTPロードジェネレーターを起動するには、ClassPathに追加し、ディレクターモードのHTTPロードジェネレーターの-Cスイッチを使用して、コミュニケーターの完全に損なわれたクラス名を指定します。 -pスイッチを使用して、パワーデーモンのネットワークアドレスを指定します。複数のコンマ分離アドレスを入力できます。そうした場合、ディレクターはそれらの各アドレスのパワーコミュニケーターをインスタンス化し、その結果を別の列に記録します。
例(httploadgenerator.jarにコンパイルされたパワーコミュニケーターを使用):
$ java -jar httploadgenerator.jar director --ip LOADGENIP --load myArrivalRates.csv -o myLog.csv -p PWRRDAEEMONIP:PWRDAEMONPORT -c my.fully.qualified.Classname --lua./http_calls.lua
例(別の瓶にコンパイルされたパワーコミュニケーター付き):
$ java -cp "MYJAR.jar;httploadgenerator.jar" tools.descartes.dlim.httploadgenerator.runner.Main director --ip LOADGENIP --load myArrivalRates.csv -o myLog.csv -p PWRRDAEEMONIP:PWRDAEMONPORT -c my.fully.qualified.Classname --lua ./http_calls.lua
-hスイッチを使用してヘルプページを表示します。
Usage: java -jar httploadgenerator.jar COMMAND [<options>...]
HTTP load generator for varying load intensities.
-h, --help Display this help message.
Commands:
director Run in director mode.
loadgenerator Run in director mode.
java -jar httploadgenerator.jar director -h実行するディレクターのヘルプページ:
Run in director mode.
Usage: java -jar httploadgenerator.jar director [<options>...]
Runs the load generator in director mode. The director parses configuration
files, connects to one or multiple load generators, and writes the results to
the result csv file.
--randomize-users With this flag, threads will not pick users (HTTP input
generators, LUA script contexts) in order. Instead, each
request will pick a random user. This setting can
compensate for burstiness, caused by the fixed order of
LUA calls. It is highly recommended to configure long
warmup times when randomizing users.
--wd, --warmupduration, --warmup-duration=WARMUP_DURATION
Duration of the warmup period in seconds. Warmup is
skipped if set to 0.
Default: 30
--wp, --warmupause, --warmup-pause=WARMUP_PAUSE
Duration of the pause after conclusion of the warmup
period in seconds. Ignored if warmup is skipped.
Default: 5
--wr, --warmup, --warmuprate, --warmup-rate=WARMUP_RATE
Load intensity for warmup period. Warmup is skipped if set
to < 1.
Default: 0.0
-a, --load, --arrivals, --loadintensity=ARRIVALRATE_FILE
Path of the (LIMBO-generated) arrival rate file.
Default: arrivalrates.csv
-c, --class, --classname, --powerclass=POWER_CLASS
Fully qualified classname of the power communicator. Must
be on the classpath.
-h, --help Display this help message.
-l, --lua, --script=LUASCRIPT
Path of the lua script that generates the call URLs.
Default: http_calls.lua
-o, --out, --log, --csv, --outfile=OUT_FILE
Name of output log relative to directory of arrival rate
file.
Default: default_log.txt
-p, --power, --poweraddress=POWER_IP[:POWER_PORT]
Adress of powerDaemon. Multiple addresses are delimited
with ",". No address => no power measurements.
Default: []
-r, --seed, --random, --randomseed=SEED
Integer seed for the random generator. Seed of 0 =>
Equi-distant dispatch times.
Default: 5
-s, --ip, --adress, --generator=IP
Adress of load generator(s). Multiple addresses are
delimited with ",".
Default: [127.0.0.1]
-t, --threads, --threadcount=NUM_THREADS
Number of threads used by the load generator. Increase
this number in case of dropped transactions.
Default: 128
-u, --timeout=TIMEOUT Url connection timeout in ms. Timout of 0 => no timout.
Default: 0
追加例:
$ java -jar httploadgenerator.jar director -s 192.168.0.201 -a ./arrivalRates/test.txt -o myLog.csv -p 127.0.0.1:8888 -c tools.descartes.dlim.httploadgenerator.power.TMCTLDCommunicator -l ./http_calls.lua
結果は、出力CSVファイルに書き込まれます。それらは、時間間隔ごとに次のメトリックを含んでいます。
-u, --timoutコマンドラインスイッチを使用して指定されているように、トランザクションはタイムアウトによって中断されました。作業でHTTPロードジェネレーターを使用している場合は、私たちを引用して告発してください。
@inproceedings{KiDeKo2018-ICAC-PowerPrediction,
author = {J{'o}akim von Kistowski and Maximilian Deffner and Samuel Kounev},
booktitle = {Proceedings of the 15th IEEE International Conference on Autonomic Computing (ICAC 2018)},
location = {Trento, Italy},
month = {September},
title = {{Run-time Prediction of Power Consumption for Component Deployments}},
year = {2018},
}