DESTROY YOUR INTERNET

負荷試験スクリプト: インターネット破壊

インターネット破壊とは何か

CUIで使える高機能な負荷試験スクリプトです。設定ファイルを作成することでシナリオ試験を実施でき、多重I/Oを利用して、簡単に高負荷をかけることができます。

基本的な使い方

コマンドライン引数でコンフィグファイルを指定します。

$ internethakai scenario.yml

エラーカウントが0だった場合は、exit status 0で終了し、それ以外の場合はexit status が 1 となります。

シナリオの自動生成

以下のコマンドでシナリオを自動で作成することができます。最初に使うときはこちらを使用してみてください。

$ hakaigen

実行時オプション

基本的にシナリオよりもコマンドライン引数での設定値が優先されます。

-h –help

ヘルプを表示

-v –version

バージョンを表示

-r –max-request

リクエスト並列数を上書きします。

-s –max-scenario

シナリオ並列数を上書きします。

-p –max-process

プロセス数を上書きします。

-l –loop

ループ回数を上書きします。

-d –duration

持続時間を上書きします。

-g –log-level

ログレベルを上書きします。

-n –nth

n 番目のアクションだけを実行(0から数えます)。

–test

テストモードで実行。テストモードで実行すると、強制的に並列数を1、ループ数1、1プロセス、ログレベル3で実行します。リクエストが正常に送られているか確認するために使用できます。

シナリオの基本項目

YAMLの連想配列で設定項目を指定します。指定すべきキー名について解説します。まずは hakaigen コマンドによる自動生成を試してみてください。

loop

各シナリオのループ回数を指定します。

total_duration

持続時間を指定します。total_durationを設定した場合、ループ回数は無視し、一定時間シナリオの実行をつづけます。単位は秒です。

max_request

HTTPクライアントの数を指定します。max_requestが10であればHTTPクライアントを10作成し、10のクライアントが同時にリクエストします。なおここで設定した値は全プロセスの合計値です。おすすめの値は “100” です(1プロセスあたり100コネクションくらいになるように調整しましょう)。

max_scenario

シナリオの数を指定します。デフォルトではmax_requestと同じ値になります。特に指定の必要はありませんが、アクセスするユーザーの数を増やしたい場合に多めに設定します。たとえば、max_requestが10、max_scenarioが20であれば、20*ループ数分のシナリオを10個のHTTPクラアントが順次実行していきます。concurrencyというキー名から変更しました。

log_level

ログ出力のレベルを指定します。おすすめの値は “2” です。

4

取得したhtmlの内容まで表示

3

各リクエストの詳細を表示

2

基本項目のみ表示

encoding

ページの文字コード UTF-8, Shift_JIS, JIS, EUC-JP

domain

ホスト名(httpを含める)

rev

true, false。true に設定すると、RubyRevを使用し、多重I/Oでのリクエストを行ないます。おすすめの値、true。初期値true。

user_agent

リクエストに使用するUserAgent

show_report

true, false。 true にすると、結果レポートを表示します。

save_report

true, false。 true にすると、結果レポートをファイルに保存します。

log_dir

結果レポートを保存するディレクトリ。省略時は設定ファイルと同じディレクトリとなります。

ranking

平均レスポンス、エラー率のワーストランキングを何位まで表示するか。デフォルトは10。

timeout

タイムアウトするまでの秒数。デフォルトは60秒です。おすすめの値、5。

actions

リクエストの内容。action のリストを指定します。後述します。

max_process

破壊力をあげたい場合に設定しましょう。プロセス数を指定します。1プロセスあたり100コネクションくらいになるように調整しましょう。forkというキー名から変更しました

host_name

基本的に指定の必要はありませんが、特別にHOSTヘッダを指定したい場合に設定してください。

actions の書き方

基本的な書き方

YAML

POSTリクエスト

method 

内容のチェック

scan 

サイズのチェック

assert_size 

リダイレクトの確認

変数の設定

ファイルからランダムに取得

user_id 

レスポンスで変数を設定

正規表現による変数の設定

WAIT

実行時の表示

o

並列数分のリクエストが終了

x

タイムアウトなどエラー

O

1プロセス分のリクエストが終了

高度な使い方

クラスを指定することで、挙動の詳細を変更できます。

ソーシャルアプリで使用する

client_handler に “SocialClientHandler” を指定します。

クエリパラメーターに opensocial_viewer_id というキー名で、opensocial_person_id をつけるようになります。

opensocial_id_path に opensocial_person_id のリストを書いたファイルのパスを指定すると、そちらの id を選択して使用します(ファイルは改行区切り)。

ファイルではなく、opensocial_ids というキー名で、opensocial_person_id のリストを指定することもできます。

携帯サイトで使用する(動作未検証)

client_handler に “MobileClientHandler” を指定します。

アクションごとに carrier を指定することで、ケータイキャリアを指定することもできます(1=DoCoMo, 2=KDDI, 3=SoftBank)。

uid_path に uid のリストを書いたファイルのパスを指定すると、そちらの uid を選択して使用します。ファイルは、改行区切りで、各行に、キャリアid と uid を “,” 区切りで書いてください。ファイルではなく、uids というキー名でuidのリストを指定することもできます。