こんにちは、学生アルバイトのohkiです。弊社では、クローリングによるRPAのために、Web APIなどをご提供する機会も多いのですが、その際にWebサーバがどこまでの負荷に耐えられるか、パフォーマンスはどうかを気にしなければなりません。そんな時に気軽にWebサーバの性能を測定できるのがapache benchです。 それでは、実際に使ってみましょう。

手順

apache benchはapacheに付属している標準ツールなので、apacheがインストールされていればすぐに使用することができます。確認してみましょう。

ab -V
This is ApacheBench, Version 2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

このように、apachebenchのバージョンを確認することができました。では、早速テストしてみましょう。 使うコマンドは基本的に以下の1つだけです。

ab -n 100 -c 10 -p /tmp/test.json [URL]

ここで使用しているオプションについて説明します。

-n [発行リクエスト数]

総リクエスト数を指定します。

-c [同時接続数]

同時にリクエストを発行するユーザーの数を指定します。

つまり、今回の場合、同時に10ユーザーが一人当たり100/10=10リクエスト発行するということになります。

-p [ファイルパス]

指定したurlに送信したいデータがある場合、ここでそのファイルを指定します。今回はPOSTで送信していますが、PUTで送信したい場合は-uオプションを使用します。

実行結果は以下のようになります。

Concurrency Level:      100
Time taken for tests:   0.700000 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      30000 bytes
HTML transferred:       2700 bytes
Requests per second:    128.00 [#/sec] (mean)
Time per request:       779.000 [ms] (mean)
Time per request:       7.000 [ms] (mean, across all concurrent requests)
Transfer rate:          46.00 [Kbytes/sec] received

このように、”Time per request”から、1リクエストあたりの処理時間の平均がどのくらいの時間だったか、”Complete requests”から、何件のリクエストが成功したか、などを知ることができます。また、アクセスや同時接続数を上げていった時に、”Failed requests”が0ではなくなる時がWebサーバの処理の限界であると考えることができます。

まとめ

以上のように、簡単にWebサーバの性能を測定することができます。しかし、apache benchはDOS攻撃にも使えるツールですので、十分注意して使用しましょう。