Apache Benchで負荷テスト

サーバを構築した際や、サービス開発を行った際にどのくらいまでのアクセスに耐えられるのかテストを行います。

その際に利用するのが、今回紹介します「Apache Bench」です。

導入も使い方もとても簡単なので、今後の作業後にやっておくことで、思わぬアクセス増加でのサーバダウンを未然に防げるかもしれません。

導入方法

各OSごとで違いますが、パッケージ管理ツールで簡単に入れることができます。

CentOSの場合

sudo yum install apr-util

Ubuntuの場合

sudo apt install apache2-utils

使い方

上記の導入を行うことで、「ab」というコマンドが利用可能になります。

通常は「-c」や「-n」のオプションを使うことで、同時リクエスト数、総リクエスト数などが指定することができます。

ab -n [総リクエスト数] -c [同時リクエスト数] [URL]

もうちょっとわかりやすく、実際の値での例をあげてみます。

ab -n 100 -c 10 http://localhost/

これを実行すると、総リクエスト数が100で同時リクエストが10のため、10回の処理が、http://localhost/宛てにアクセスが行われます。

実行後に、以下のような結果が表示されます。

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)…..done

Server Software: nginx
Server Hostname: localhost
Server Port: 80

Document Path: /
Document Length: 40695 bytes

Concurrency Level: 10
Time taken for tests: 6.709 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 4106100 bytes
HTML transferred: 4069500 bytes
Requests per second: 14.90 #/sec
Time per request: 670.936 ms
Time per request: 67.094 [ms] (mean, across all concurrent requests)
Transfer rate: 597.65 [Kbytes/sec] received

Connection Times (ms)
           min mean[+/-sd] median max
Connect:     0 0 0.1 0 1
Processing: 55 190 39.1 192 385
Waiting:    55 190 39.1 192 385
Total:      56 190 39.0 192 385

Percentage of the requests served within a certain time (ms)
50% 192
66% 203
75% 210
80% 215
90% 231
95% 239
98% 251
99% 385
100% 385 (longest request)

Complete requestsは、正常に処理できた件数となります。
エラーとなった件数については、Failed requestsに表示されます。

Requests per secondは、1秒間に何件のリクエストを処理できるかと言うことですので、今回の場合には14~15件のリクエストが処理可能と言うことです。

また今回の場合、Connection Times (ms) の個所の結果から、1リクエストの処理にかかった時間は56(Totalのminを参照)~385ミリ秒(Totalのmaxを参照)で、平均は190ミリ秒と言うのがわかります。

限界値の探り方

最初は低い数値からスタートし、Failed requestsが0以上になる場合や、Requests per secondが著しく落ち込む場合には、その辺りが現状での限界値と思われます。
※負荷テスト時には、CPUやメモリなども確認すると更に良いです。

ApacheやNginxなどの設定を変更することで、限界値が大きく変わってくるため、設定値を変更しつつCPUやメモリの使用率を確認しながら、ベストな値を見つけ出してください。

総括

簡単に負荷テストができますが、設定値を上げるとサーバの負荷が上がりすぎてダウンしてしまうことや、最悪の場合にはサーバ自体を停止されることもありますので、アプリの同時接続の検証を行う場合にはローカル環境を利用した方が良いでしょう。

各事業者で、負荷試験をする際に事前連絡をする必要があるところもありますので、確認してから実施することをおすすめします。

関連する記事