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のリストを指定することもできます。