apache benchによるWEBサービスの性能測定について
今回はWEBサーバの性能測定について記載します。
インフラ移行を行う際、新環境でWebサービス公開前の性能測定等を行う必要があるかと思います。
そんなときに手軽に利用できるツールとてapache benchがあります。
今回導入~測定(確認ポイント)迄をまとめてみました。
Apache Benchの入手
Apache Benchは、Apache Software Foundationが提供している「Apache HTTP Server」に同封されておりApache HTTP Serverがインストールされている環境なら直ぐに利用可能です。
今回は、Windows版(Ver2.4)を利用しましたが、Windows版はApache HTTP Serverをインストールしなくても、zipを解凍したbinフォルダーにApache Benchのツールが同封されています。
Apache Benchの利用
まず、Windows版 Apache Benchを選定した理由ですが、前提としてグローバルIP経由での性能測定を行いたかったことと、上記「Apache Benchの入手」で記載した通り導入が手軽だったことです。
次に、Apache Benchの実行方法ですが、Windowsのコマンドプロンプトを起動して、httpで測定するの場合 ab.exeを、httpsで測定するの場合 abs.exeを実行します。
基本コマンド
HTTP C:\Apache24\bin>ab -n 100 -c 5 http://・・・・・・・ HTTPS C:\Apache24\bin>abs -n 100 -c 5 http://・・・・・・・
Apache Bench基本オプション
基本的には-nと-cオプションで測定可能です。
-n:トータル発行するリクエスト数 -c:同時接続数
その他よく利用するオプション
-t:サーバからのレスポンスの待ち時間(秒) -A:ベーシック認証が必要な場合ユーザー名:パスワードを指定 -p:ポストデータが必要な場合指定 -X:プロキシ経由でリクエストする場合プロキシサーバ名:ポート番号を指定 -V:バージョンを表示 -h:ヘルプを表示
Apache Benchの確認方法
コマンドを実行すると以下の様な結果が出力されます
c:\Apache24\bin>abs -n 100 -c 5 https://・・・・・・・ Server Software: nginx Server Hostname: ・・・・・・・ Server Port: 443 SSL/TLS Protocol: ・・・・・・・ Server Temp Key: ・・・・・・・ TLS Server Name: ・・・・・・・ Document Path: ・・・・・・・ Document Length: 20838 bytes Concurrency Level: 5 Time taken for tests: 3.625 seconds Complete requests: 100 Failed requests: 50 (Connect: 0, Receive: 0, Length: 50, Exceptions: 0) Total transferred: 2134874 bytes HTML transferred: 2076774 bytes Requests per second: 27.58 [#/sec] (mean) Time per request: 181.271 [ms] (mean) Time per request: 36.254 [ms] (mean, across all concurrent requests) Transfer rate: 575.06 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 19 51 49.5 38 374 Processing: 48 110 105.7 78 591 Waiting: 44 104 101.6 73 582 Total: 75 161 118.2 122 625 Percentage of the requests served within a certain time (ms) 50% 122 66% 141 75% 151 80% 179 90% 298 95% 517 98% 624 99% 625 100% 625 (longest request)
出力項目
・Complete requests 正常に処理したリクエスト数 ・Failed requests 処理に失敗したリクエスト数(基本0) ・Time taken for tests テストに要した時間(数値が低いほど良い) ・Requests per second 1秒で処理できるリクエスト数(数値が高いほど良い) ・Time per request(mean) 同時実行したリクエストの平均処理時間(数値が低いほど良い) ・Time per request(mean, across all concurrent requests) 1リクエストの平均処理時間(数値が低いほど良い) ・Transfer rate 1秒間で受け取ったデータの大きさ(数値が高いほど良い) ・Connection Times (ms) リクエストに要した時間(ミリ秒)の内訳。 ・Percentage of the requests served within a certain time 全リクエストの割合(%)に対して、処理が完了した時間(ms)を表す。
主な確認ポイント
リクエストは全部正常に処理されたか?
Complete requests/Failed requests
※今回50リクエスト失敗していますが、レスポンス毎にContent-Lengthのサイズが異なる(動的)ページの場合、失敗したリクエストとして“Length:”と伴にカウントされます。
(1つ前の結果とContent-Lengthを比較し、異なる場合失敗としてカウントされます)
この場合、apacheログ等を参照して、レスポンスが200且つ妥当なContent-Lengthが返却されて
いれば問題ありません。
秒間どれくらいのリクエストを捌けるのか?
Requests per second
(例) 月間 1千万PVのサイトの場合、秒間≒3.8リクエストは達成する必要があります。 10,000,000(PV)÷30(日)÷24(時間)÷60(分)÷60(秒) ≒ 3.8
パフォーマンス確認
Time per request(mean, across all concurrent requests)
1リクエストあたりの処理時間を確認します。
何リクエストまで耐えられるのか?
オプション -n -cを増していき、Failed requestsが0でなくなるのが限界点となります。
その他
Apache Benchで性能測定をする際、301、302等リダイレクトを行っていると正しく計測されませんので、一度apacheログ等でレスポンスが200が返却されている事を確認してから、実施すると良いです。
Apache Benchは、手軽に導入できるので是非活用してみてください。