Apache Benchを使った負荷テストのやり方
2016/07/11 追記しています
皆さん負荷テストツールって普段使ってますか?
WEBシステムを開発する際には、1人〜十数人で開発をすると思いますが、
受諾案件では要件を満たす開発ばかりしていて速度やパフォーマンスのチューニングを行う事が少ないと思います。
いざ運用が始まって、サーバーが落ちた・・とならないように負荷テストを事前にやっておきましょう。
Apache Benchでのサーバーパフォーマンスのチェック方法をメモしておきますので、どなたかの役に立てれば幸いです。
負荷テストとは
負荷テストって何ですか?という方のために簡単に説明をすると
低い負荷ではシステム上問題が無くても、高負荷での動作だと不具合を起こす現象を回避するためのテストです。
アクセスが集中して落ちてるサイトがありますよね。。
想定されるアクセスがあっても落ちないサイトにするための負荷テストです。
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を使った負荷テストのやり方でした。
最新情報をお届けします