Apache Benchを使った負荷テストのやり方


2016/07/11 追記しています

20120523 03 1

皆さん負荷テストツールって普段使ってますか?

WEBシステムを開発する際には、1人〜十数人で開発をすると思いますが、
受諾案件では要件を満たす開発ばかりしていて速度やパフォーマンスのチューニングを行う事が少ないと思います。

いざ運用が始まって、サーバーが落ちた・・とならないように負荷テストを事前にやっておきましょう

Apache Benchでのサーバーパフォーマンスのチェック方法をメモしておきますので、どなたかの役に立てれば幸いです。

IT/WEB業界への転職なら求人サイトGreen

負荷テストとは

負荷テストって何ですか?という方のために簡単に説明をすると
低い負荷ではシステム上問題が無くても、高負荷での動作だと不具合を起こす現象を回避するためのテストです。

アクセスが集中して落ちてるサイトがありますよね。。
想定されるアクセスがあっても落ちないサイトにするための負荷テストです。

Webサーバーの負荷テストならまずab

Webサーバーの負荷テストならまずabだと、小飼 弾さんも言っています!
という訳でabを使ってみます。

インストール

abのインストールにはApcheをインストールする必要があります。

MACの方は標準でインストールされています。
※OS X Lionではバグがあり動作しないため、先日書いたブログにインストール方法がありますので、そちらを参考にしてください。
windowsの方はxamppをインストールすると早いです。

c:¥xamppにxamppをインストールしたとすると、コマンドプロンプトを起動してから以下のコマンドを実行してください。

cd C:\xampp\apache\bin\

これでabコマンドが実行可能になっているはずです。

負荷テストのやり方

負荷テストを実行するコマンドについて説明します。
ターミナルからコマンドを実行する事でサーバーに負荷をかけていきます。

構文はこのようになります

$ ab [-OPTION] URL

例) 10人の同時接続を100回実行するコマンド

ab -n 100 -c 10 http://example.com/

abオプション一覧

コマンドで使えるオプションの一覧です。

オプション
意味
-n 数値 テストで発行するリクエストの回数を数値で指定
-c 数値 テストで同時に発行するリクエストの数を数値で指定
-t 数値 サーバからのレスポンスの待ち時間(秒)を数値で指定
-p ファイル名 サーバへ送信するファイルがある場合に指定
-t コンテンツタイプ サーバへ送信するコンテンツヘッダを指定
-v 数値 指定した数値に応じた動作情報を表示
-w 結果をhtmlで出力(出力をファイルに保存すればwebブラウザで表組みされたものが見られる)
-x 属性 html出力のtableタグに属性を追加(borderなど)
-y 属性 html出力のtrタグに属性を追加
-z 属性 html出力のtdまたはthタグに属性を追加
-c ‘cookie名称=値’ cookie値を渡してテストする
-a ユーザー名:パスワード ベーシック認証が必要なコンテンツにテストする
-P ユーザー名:パスワード 認証の必要なプロキシを通じてテストする
-x プロキシサーバ名:ポート番号 プロキシ経由でリクエストする場合に指定
-v abのバージョン番号を表示
-k http/1.1のkeepaliveを有効にしてテストする
-h abのヘルプを表示

負荷テストを実行

負荷テストを実行してみます。
テストが完了すると、下のように結果がコンソールに出力されます。

$ ab -n 1000 -c 100 http://www.exapmle.com/
This is ApacheBench, Version 2.3 <$Revision: 1178079 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.exapmle.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache
Server Hostname:        exapmle.com
Server Port:            80
Document Path:          /
Document Length:        18634 bytes
Concurrency Level:      100
Time taken for tests:   53.471 seconds
Complete requests:      1000
Failed requests:        308
(Connect: 0, Receive: 0, Length: 308, Exceptions: 0)
Write errors:           0
Non-2xx responses:      308
Total transferred:      13305317 bytes
HTML transferred:       13061664 bytes
Requests per second:    18.70 [#/sec] (mean)
Time per request:       5347.142 [ms] (mean)
Time per request:       53.471 [ms] (mean, across all concurrent requests)
Transfer rate:          243.00 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:       37  562 629.6    322    4898
Processing:    63 3184 6009.8    540   52827
Waiting:       47 1524 3194.3    438   42777
Total:        108 3746 6167.5   1011   53471
Percentage of the requests served within a certain time (ms)
50%   1011
66%   2388
75%   4347
80%   5581
90%  10652
95%  15672
98%  23009
99%  28869
100%  53471 (longest request)

特に確認すべき内容は下の3点です。

Failed requests

NGリクエストの数。ここが多いほど処理能力をオーバーしています。

Requests per second

1秒間に処理出来るリクエスト数が判ります。数字が大きいほど制能が良いです。

Connection Times Connect/Processing/Waiting

リクエスト当たりの処理の内訳を示す。
測定したリクエスト全体でのばらつきやリクエスト当たりの処理の内訳を見極るための指標にします。

出力結果の見方

Server Software Apacheのバージョン
Server Hostname サーバマシン名
Server Port ポート番号
Document Path アクセス先ファイル
Document Length アクセス先ファイルサイズ
Concurrency Level 同時送信リクエスト数
Time taken for tests リクエスト完了に要した処理時間
Complete requests 総リクエスト数
Failed requests 失敗したリクエスト回数
Total transferred ファイルの総容量
HTML transferred アクセス先ファイルの容量
Requests per second 1秒あたりに処理されたリクエスト数
Time per request 1秒あたりに処理された所要時間
Time per request(mean, across all concurrent requests) 1秒あたりに処理された所要時間
Transfer rate 1秒あたりに受信された容量
Connnection Times (ms) 上から順に接続(Connect)、処理(Processing)、待ち時間(Wait)を集計し、最小値、平均、最大値、平均で表している
Percentage of the requests served within a certain time (ms) 処理時間の推移

負荷テストには他にもApache JMeterなどがありますが、
単一ページのテストを行いたいのであればApache Benchが1番だと思います。

以上、Apache Benchを使った負荷テストのやり方でした。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

follow us in feedly