なんちゃってウェブ系エンジニアの備忘録

某IT企業で働くなんちゃってウェブ系エンジニアが技術やデザインなど役に立ちそうなものなどを備忘録として載せていきます

Apacheのabコマンドでベンチマークを行う

サイトの表示速度やパフォーマンスチェックなど行いたい場合は、
Apacheについているabコマンド(Apache Bench の略語)で行なうことができます。

他にもApache JMeterとか色んなベンチマークあったりするんですが、
お手軽でとにかくベンチマークを行いたい場合はabコマンドで十分かと思います。

以下がabコマンドの利用例です。
とその前に、使用頻度が高そうなabコマンドのオプションをまとめておきます。

-c 数値

同時に実行するリクエスト数。デフォルトでは同時に実行するリクエストは1リクエスト

-n 数値

実行するリクエストの総数

-A ユーザ名:パスワード

ベーシック認証があるサイトで行いたい場合、ユーザーとパスワードを入れます

-x プロキシサーバ名:ポート番号

プロキシ経由でテストを行いたい場合、プロキシサーバとポート番号を入れます

-w

実行結果がHTMLファイルへ出力され、それをブラウザで見ることが出来る。

-v 数値(1から4のみ)

指定した数値(1から4)に応じて、実行結果の情報を取得
4だとヘッダの詳細な情報を取得できたり、3の場合(404や200)といった応答コードを取得

-k

HTTPキープアライブ機能を有効。

使用例

10人の同時アクセスを100回を行いたい場合

# ab -k -c 10 -n 100 http://example.co.jp/test/index.html

他にもいくつかのオプションを入れることが出来るが、基本はこれを覚えておけば良いかと。

# ab -k -c 【同時に実行するリクエスト数】 -n 【リクエストの総数】URL

んで、実行結果が以下通り。

実行結果

Server Software:        Apache
Server Hostname:        example.co.jp/test/index.html
Server Port:            80

Document Path:          test/index.html
Document Length:        371 bytes

Concurrency Level:      10
Time taken for tests:   1.335562 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      61100 bytes
HTML transferred:       37100 bytes
Requests per second:    74.87 [#/sec] (mean)
Time per request:       133.556 [ms] (mean)
Time per request:       13.356 [ms] (mean, across all concurrent requests)
Transfer rate:          44.18 [Kbytes/sec] received

上記、実行結果で着目すべきものをいくつか挙げておきます。

Complete requests: 100

100回テストを行った場合、接続できた回数。

Failed requests: 0

100回テストを行った場合、接続できなかった回数
この場合は「0」なのですべてのリクエストが問題なく処理されたことが分かりますね。

Requests per second: 74.87 [#/sec] (mean)

1秒間に処理されたリクエスト数
この数値が高ければ高いほど、たくさんのユーザがアクセスしてもサーバは落ちないという意味で判断する材料になりそうです。

とこんな感じにまとめましたがabコマンドを行う際、サイトに負荷がかかるため、
自分と関係ないサイトを勝手にベンチマークしないようにしましょう。