WEBサイト負荷テストツール7選 [2012/3/7]
WEBサイトに情報を入力するだけで負荷テストができるLoad Impact、GUIから操作できるApache JMeterや、コマンドラインから使うcurl-loader・httperf・Siege・Pylot・abを簡単な使い方と共に紹介していきます。
Load Impact
Load ImpactはスゥエーデンのGatorhole AB社が管理している、フォームに必要な情報を入力するだけで負荷テストをしてくれるWEBサイトです。
ツールをインストールしたりする必要が有りませんので、非常に楽です。
毎月5回まで無料で負荷テストができます。
それ以上は10回/$30のクレジットを購入する事になります。
トップページのフォームにURLを入れて「Run free test」をクリックすると、世界各地のいずれかのAmazon EC2サーバから負荷テストのアクセスが開始されます。
これだけでも使えなくはないですが、会員登録をして、東京のAmazon EC2サーバから負荷テストをしてみます。
トップページ右上の”register”をクリックしてください。
メールアドレスとパスワードを入力して登録するか、もしくは、Googleアカウント、OpenIDなどからでも登録できます。
登録確認のメールアドレスに記述されているURLを開いて、フォームに従って入力していきます。
これでアカウントが出来ました。
さっそく負荷テストをしてみましょう。
メニューの”Test configurations”をクリックします。
“Create test configuration”をクリックし、各種項目を設定していきます。
Load zoneのプルダウンで”Tokyo, JP(Amazon)”を選んでおきます。
“Create test configuration and start test”をクリックすると、負荷テストが開始されます。
完了しました。
負荷テストのシナリオが簡単に設定できるのが格好いいですね。
Apache JMeter
JMeterはJakartaプロジェクトが開発している無償(Apache License, V2.0)の負荷テストツールで、
GUIインターフェースを使ってかなり細かく負荷テストのシナリオを設定する事ができます。
面白いのは、ブラウザで辿ったページを記録して、それに対して負荷テストをしたりする事もできたりする点です。
インストールは簡単で、JavaでできているためOSに依存せず、JavaがインストールされているWindows、Mac OSX、Linuxなどで実行可能です。
ここでは、WindowsのPCにJMeterをダウンロードしてカンタンな負荷テストを走らせてみます。
▼Javaのインストール
まず、Javaをダウンロード & インストールします。
以下のサイトからダウンロードできます。
http://java.com/ja/download/
Javaのインストールが終ったら、以下のサイトにアクセスして、Binariesの項目からapache-jmeter-x.x.zipファイルをダウンロードします。
http://jmeter.apache.org/download_jmeter.cgi
▼JMeterの起動
zipファイルを解凍します。
解凍されたフォルダの中から bin フォルダを開き、jmeter.bat をクリックすると
コマンドプロンプトが表示されたのち、JMeterが立ち上がります。
起動しました。
▼負荷テストのシナリオを設定
「テスト計画」を右クリックしてスレッドグループを作成します。
作成されたスレッドグループをクリックして「スレッド数」(同時アクセス数)と「ループ回数」(連続アクセス数)に数値を入力します。
※JMeterはテストを実行しているPCのスペックによって負荷テストできるスレッド数などが制限されますので、高い数値を入力すると正確に試験できない可能性がありますので注意です。
「ワークベンチ」を右クリックしてHTTPプロキシサーバを作成します。
右下の「開始」をクリックします。
▼Webブラウザのプロキシを設定
Windowsの「コントロールパネル」から「インターネット オプション」を開き、「接続」タブの「LANの設定」を開きます。
「LANプロキシサーバを使用する」にチェックを入れます。
アドレスに “127.0.0.1″または”localhost”、ポートに “8080″ を入力して 「OK」をクリックします。
最後に、「適用」をクリックして下さい。
その後、負荷テストしたいページをWebブラウザで閲覧します。
閲覧したURLのリストがJMeterのスレッドグループに記録されていきます。
記録を確認するときは、左メニューの「スレッドグループ」をダブルクリックします。
記録ができたら「HTTPプロキシサーバ」の設定を開いて「停止」をクリックします。
停止したら、負荷テストするを必要のない記録を削除しておきましょう。
▼負荷テスト
「スレッドグループ」を右クリックして、「グラフ表示」と「統計レポート」を追加します。
メニューから「実行」→「開始」をクリックすると、テスト計画ファイルの保存画面が出てきますので保存しておきましょう。
テスト計画の保存ができると、負荷テストが開始されます。
完了しました。
負荷テストが完了したら、Windowsの「インターネット オプション」の設定を元に戻しておきましょう。
JMeterを使っての負荷テスト方法については、こちらの資料が参考になりますので、お奨めです。
Apache JMeterで負荷試験をしよう!
http://www.jasst.jp/archives/jasst07e/pdf/C2-1.pdf
水野浩典
コアテクノロジー部 コンサルティング▼インテグレーション統括本部 日本ヒューレットパッカード株式会社
curl-loader
http://curl-loader.sourceforge.net/
curl-loaderはイスラエル人のRobert IakobashviliとMichael MoserによってC言語で作成された、コマンドラインの負荷テストツールです。
ライセンスはGPLv2で無料で使えます。
複数のIPアドレスを生成して別々のクライアントからリクエストが来ているような状況を作る事ができます。
また、段階的にアクセス数を増やしていく設定なども可能です。
Linux環境で動作します。
▼インストール
インストールするOSはCentOS 5.7です。
1 2 3 4 5 6 | # cd /usr/local/src # wget http://sourceforge.net/projects/curl-loader/files/curl-loader/curl-loader-0.56/curl-loader-0.56.tar.bz2/download # tar jxvf curl-loader-0.56.tar.bz2 # cd curl-loader-0.56 # make # make install |
▼設定ファイルの編集
設定ファイルを用意して複数IPアドレスでlocalhostへ負荷を掛けてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # vi load_test.conf ########### GENERAL SECTION ################################ BATCH_NAME= 10K # ログと統計情報のファイル名 CLIENTS_NUM_MAX=1000 # クライアントの最大数 CLIENTS_NUM_START=100 # スタート時のクライアント数 CLIENTS_RAMPUP_INC=50 # 追加起動されるクライアント数 INTERFACE =eth0 # インターフェース NETMASK=16 # ネットマスク IP_ADDR_MIN= 192.168.1.1 # IPアドレス最小値 他ホストへリクエストするときは、自サーバのIPアドレスを記述 IP_ADDR_MAX= 192.168.53.255 # IPアドレス最大値 他ホストへリクエストするときは、自サーバのIPアドレスを記述 CYCLES_NUM= 10 # 繰り返し回数 -1は制限なし URLS_NUM= 1 # URLの数 ########### URL SECTION #################################### URL=http://localhost/index.html # URL URL_SHORT_NAME="local-index" # REQUEST_TYPE=GET # リクエストタイプ TIMER_URL_COMPLETION = 5000 # タイムアウト時間 単位はミリ秒 TIMER_AFTER_URL_SLEEP =20 # 次にリクエストするまでのスリープ時間 |
▼負荷テスト
※”SUGGESTION”や”WARNING”が出力された場合は”Cntl-C”で実行をストップし、設定を見直してください。
そのまま実行した場合はネットワークの再起動(# /etc/init.d/network restart)が必要になる場合が有ります。
負荷テストを開始します。
1 | # curl-loader -f load_test.conf |
完了しました。
10K.*という名前の試験結果が書かれたファイルが出来ていますので中を確認してみましょう。
- load_test.log # エラー
- load_test.txt # 時系列の統計
- load_test.ctx # クライアント別の統計
- load_test.ops # オペレーションの統計
httperf
http://www.hpl.hp.com/research/linux/httperf/
httperfは、ヒューレット・パッカード研究所で開発されたコマンドラインで使う負荷テストツールです。
ライセンスはGPLで無料で使えます。
コネクション数・リクエスト数・1コネクションにおけるリクエスト数を指定して実行する事ができます。
▼インストール
インストールするOSはCentOS 5.7です。
yumを使ってインストールします
rpmforgeレポジトリがインストールされていない場合は、インストールをする必要があります。
32bit OSの場合
1 | # rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm |
64bit OSの場合
1 | # rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm |
httperfをインストール。
1 | # yum --enablerepo=rpmforge install httperf |
▼負荷テスト
ここで使用しているオプションの意味は↓の通りです。
–server 接続先サーバ
–port ポート番号
–uri URLのパス
–rate 1秒間に生成するコネクション数
–num-conn コネクション数
–num-call コネクションあたりのリクエスト数 (num-conn * num-conn = 総リクエスト数となる)
負荷テストを開始します。
1 | # httperf --server localhost --port 80 --uri /index.html --rate 200 --num-conn 1000 --num-call 2 --timeout 5 |
完了しました。
結果は↓の様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Total: connections 1000 requests 2000 replies 1000 test-duration 4.996 s Connection rate: 200.2 conn/s (5.0 ms/conn, <=2 concurrent connections) Connection time [ms]: min 0.3 avg 0.6 max 7.3 median 0.5 stddev 0.6 Connection time [ms]: connect 0.0 Connection length [replies/conn]: 1.000 Request rate: 400.4 req/s (2.5 ms/req) Request size [B]: 72.0 Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples) Reply time [ms]: response 0.5 transfer 0.0 Reply size [B]: header 265.0 content 5.0 footer 0.0 (total 270.0) Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0 CPU time [s]: user 0.79 system 4.14 (user 15.7% system 82.9% total 98.7%) Net I/O: 80.9 KB/s (0.7*10^6 bps) Errors: total 1000 client-timo 0 socket-timo 0 connrefused 0 connreset 1000 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0 |
出力情報の詳細についてはこちらのblogが参考になります。
Na-ga.net
httperf man (OUTPUT)
http://na-ga.net/blog/?p=559
Siege
http://www.joedog.org/siege-home/
SiegeはJeff Fulmerが開発しているコマンドラインで使う負荷テストツールです。
ライセンスはGPLで無料で使えます。
URLを記載したファイルを用意して、複数のURLを同時にリクエストすることができます。
▼インストール
1 2 3 4 5 6 7 | # cd /usr/local/src # wget http://www.joedog.org/pub/siege/siege-latest.tar.gz # tar xvzf siege-latest.tar.gz # cd siege-2.72/ # ./configure # make # make install |
▼負荷テスト
テキストファイルにURLを記述します。
1 2 3 4 5 6 | # vi urls.txt http://localhost/index.html http://localhost/index1.html http://localhost/index2.html http://localhost/index3.html |
ここで使用しているオプションの意味は↓の通りです。
–concurrent 同時接続数
–reps コネクションあたりのリクエスト数
–benchmark リクエストとリクエストの間に遅延を入れない
–internet URLのリストからランダムにリクエストを行なう
–file URLを記述したファイル名
–log ログファイル名
負荷テストを開始します。
1 | # /usr/local/bin/siege --concurrent=100 --reps=10 --benchmark --internet --file=urls.txt --log=urls.log |
完了しました。
結果は↓の様にコンソールに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ** SIEGE 2.72 ** Preparing 100 concurrent users for battle. The server is now under siege.. done. Transactions: 1000 hits Availability: 100.00 % Elapsed time: 0.35 secs Data transferred: 0.07 MB Response time: 0.03 secs Transaction rate: 2857.14 trans/sec Throughput: 0.21 MB/sec Concurrency: 74.66 Successful transactions: 746 Failed transactions: 0 Longest transaction: 0.26 Shortest transaction: 0.00 FILE: urls.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false. |
Pylot
PylotはCorey Goldbergが開発しているコマンドラインで使う負荷テストツールです。
ライセンスはGPLで無料で使えます。
▼インストール
Pylotを実行するにはPython 2.5以上が必要になります。
Pythonをインストールします。
http://www.python.jp/Zope/download/pythoncore
1 2 3 4 5 6 7 | # cd /usr/local/src # wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz # tar zxvf Python-2.7.2.tgz # cd Python-2.7.2 # ./configure # make # make install |
Pylotをインストールします。
1 2 3 4 | # cd /usr/local/src # wget http://pylt.googlecode.com/files/pylot_1.26.zip # unzip pylot_1.26.zip # cd pylot_1.26 |
▼負荷テスト
負荷テストの設定ファイルを書き換えます。
以下の例ではhttp://localhost/post.phpにheaderを付けてappid=Demoとquery=pylotをPOSTします。
1 2 | # vi testcases.xmlhttp://localhost/post.phpPOST<![CDATA[appid=Demo&query=pylot]]> Content-type: application/x-www-form-urlencoded |
詳しくは公式ページが参考になります。
http://www.pylot.org/gettingstarted.html
負荷テストを開始します。
1 2 | # python ./run.py -xtestcases.xml # /usr/local/bin/python2.7 ./run.py -xtestcases.xml |
完了しました。
結果は↓の様にコンソールに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ------------------------------------------------- Test parameters: number of agents: 1 test duration in seconds: 60 rampup in seconds: 0 interval in milliseconds: 0 test case xml: testcases.xml log messages: False Started agent 1 All agents running... [################100%##################] 60s/60s Requests: 18428 Errors: 0 Avg Response Time: 0.002 Avg Throughput: 306.27 Current Throughput: 288 Bytes Received: 0 ------------------------------------------------- Generating Results... Generating Graphs... Matplotlib ImportError: No module named pylab ERROR: Unable to generate graphs with Matplotlib Done generating results. You can view your test at: results/results_2012.02.24_14.14.07/results.html Done. |
結果がhtmlでも書き出されていますので確認してみましょう。
ab – Apache HTTP server benchmarking tool
http://httpd.apache.org/docs/2.2/programs/ab.html
お馴染みApacheに標準でついてくる負荷テストツールです。
Apache Licenseで無償で使えます。
▼負荷テスト
ここで使用しているオプションの意味は↓の通りです。
-k keep-alive有効
-c コネクションあたりのリクエスト数
-n 同時接続数
負荷テストを開始します。
1 | # ab -k -c 10 -n 100 http://localhost/ |
完了しました。
結果は↓の様にコンソールに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # ab -k -c 10 -n 100 http://localhost/ This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient).....done Server Software: Apache/2.2.3 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 5 bytes Concurrency Level: 10 Time taken for tests: 0.55488 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Keep-Alive requests: 0 Total transferred: 27000 bytes HTML transferred: 500 bytes Requests per second: 1802.19 [#/sec] (mean) Time per request: 5.549 [ms] (mean) Time per request: 0.555 [ms] (mean, across all concurrent requests) Transfer rate: 468.57 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.3 0 5 Processing: 1 4 1.7 4 8 Waiting: 0 3 1.7 3 7 Total: 1 4 2.0 4 9 Percentage of the requests served within a certain time (ms) 50% 4 66% 6 75% 6 80% 7 90% 7 95% 8 98% 8 99% 9 100% 9 (longest request) |
編集者ブログの最新記事
- 03月07日・・・ WEBサイト負荷テストツール7選
- 03月01日・・・ Facebookのウェルカムページ廃止、どのようにしていいね!を増やせば良いのか?
- 02月28日・・・ PC版safariでiPhoneの表示イメージを確認する方法
- 02月24日・・・ 君らまだ存在してたのか…?と世間から驚かれる存在にならない為に。
- 02月22日・・・ 企業ブログを作るメリットと運用方法について