WEBサイト負荷テストツール7選 [2012/3/7]


WEBサイトに情報を入力するだけで負荷テストができるLoad Impact、GUIから操作できるApache JMeterや、コマンドラインから使うcurl-loaderhttperfSiegePylotabを簡単な使い方と共に紹介していきます。

 
 

Load Impact

http://loadimpact.com/

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

http://jmeter.apache.org/

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

http://www.pylot.org/

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&amp;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)

 
 

この記事を書いたのはです!

春になったら自転車通勤してみようかな・・

twitterはこちら

コメント

サービスに関するお問い合わせ
サービス間の連携や共同開発、
販売パートナーについてのお問い合わせ

お問い合わせフォームへ