DSAS開発者の部屋:負荷試験ツール「インターネット破壊」を公開しました

負荷試験ツール インターネット破壊を公開しました。

こちらはずっと社内で負荷試験に使用していたツールです。社内で使用していたものなので、ソーシャルアプリ向けの機能などが多少追加されていますが、もちろんんそれ以外のWebアプリケーションでも使用できます。

基本的にはApache JMeterのようなWebアプリケーションむけのシナリオ負荷試験ツールです。コマンドラインオペレーションだけで実行でき、サーバー上で簡単に負荷試験を実施できるのが特徴です。POSTリクエストなどはもちろん、レスポンスのチェックやUserAgentの偽装、ランダムな値をパラメーターにセットする機能も実装しています。

注意: 当然ながら自分の管理下にないサイトに向けて負荷試験ツールを実行するのは絶対にやめてください。非常に危険です。

物騒な名前がついていますが、これは完全にわたしの小児的感性の趣味によるところです。地震で人々が苦しんでいるところに「破壊」という名前もどうなのかと思っていたのですが、名前はあくまでも名前にすぎず、実態は負荷試験ツールですので、変に遠慮するのはやめて公開することにしました。

地震の際、電話などが機能しなくなるなか、Twitterや GoogleのPerson FinderなどのWebアプリケーションが災害時の情報交換に役立ったのは周知の事実です。そして災害時などにアクセスが殺到してもサービスを平常に行なうためには、負荷試験が必要です。頑強なWebアプリケーションを開発するために、このツールが役立てば個人的には非常にうれしいです。

インストール方法

rubygemsに登録されているため、以下のコマンドライン操作でインストールできます。RubyRevというイベント駆動のフレームワークを使用しているので、そちらも同時にインストールされます。

$ gem install insternethakai

ソースコードや詳細なドキュメントは以下のサイトにまとめています。

http://internethakai.rubyforge.org/

チュートリアル

簡単な試験を実行してみましょう。

まずシナリオのテンプレートを生成します。

$ hakaigenyour site    ex. http://example.com> example.comsave to scenario-0.yml

scenario-0.ymlというファイルにベースとなる設定ファイルが保存されました。actionsという項目をいじります。シナリオはyml形式です。

actions:  -    path: /top/index  -    path: /item/confirm  -    path: /item/doBuy    method: POST    post_params:      id: 12      category: 2

以上のようにpathをならべて書いていけば大丈夫です。POSTの箇所はmethodをPOSTと指定し、パラメーターをつけます。

以下のコマンドで実行します。–testオプションをつけると、ログレベル3、同時リクエスト数1で実行します。

$ internethakai scenario-0.yml --test

ログレベルを4にすると、レスポンスの中身まで確認できます。

$ internethakai scenario-0.yml --log=4

同時リクエスト数を50まで増やします。

$ internethakai scenario-0.yml -r 50

100回ループさせます。

$ internethakai scenario-0.yml -r 50 -l 100

5分間(300秒)試験を継続させます。

$ internethakai scenario-0.yml -r 50 -d 300

破壊力をあげるため、4プロセスで実行してみます。

$ internethakai scenario-0.yml -r300 -p4 -d300

これと同時に、負荷試験を実行しながら、cactiやgangliaなどのレポートツールでサーバーの状態を確認します。

また実行が終了すると、インターネット破壊の側にもデータが表示されるので、レスポンスに時間のかかるパスなどを確認できます。

Target domain = http://example.comLoop: 1Request Concurrency: 10Scenario Concurrency: 10ooooooOresult: failureTimePerRequest: 466.763428571429RequestPerSec: 21.4241292009657MinResponse Worst:        1: /top/index 66.806 20        2: /shop/confirm 26.582 10        3: /shop/doBuy 26.072 10AvgResponse Worst:        1: /shop/doBuy 252.2343 20        2: /top/index 39.0615 10...

上では、POSTリクエストにつけるアイテムのIDなどを固定にしましたが、実際の試験ではランダムなIDを指定したい場合もあります。

actions:  ...  -    path: /item/doBuy    method: POST    post_params:      id: 12 # ←ここをランダムに変更したい!      category: 2

まず1から100までの値を書いたファイル(改行区切り)を用意します。

$ ruby -e "1.upto(100){|i| puts i.to_s}" > ids

こちらを変数として利用するように設定ファイルを書き換えます。

vars:  -    var_file: ./ids    var_name: item_idactions:...  -    path: /item/doBuy    method: POST    post_params:      id: (%item_id%) # ←ここをランダムに変更したい!      category: 2

この状態で実行すれば、1回のシナリオごとに異なる値が使用されます。

$ internethakai scenario-0.yml -r50 -d300

(takada-at)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中