ApacehBenchでの負荷テストをやったので、忘れないうちに覚えておかないといけないことはメモっておこうね。

-nが合計リクエスト数、-cが平行する処理数。なので、以下の場合100リクエストを10列並行して投げる。
# ab -n 100 -c 10 https://vamdemicsystem.black
FailedRequestが0であれば、処理しれきれていること。
だんだん、並列数、リクエスト数を増やしていき、FailedRequestが発生してきたタイミングが現状での限界。
なので、ミドルウェアのエラーログやアプリケーションログを見始める必要があるよ。
ちなみに、1番最初のリクエストで取得したサイズをそれ以降のリクエストを照合し、サイズが同じならComplete、違った場合Failedとなるらしい。
なので、リクエストごとにサイズが変化するページをテストする場合は、サーバ内のアクセスログがすべて200で処理されていることを確認する必要があるみたい。
その他にも、
・httpdをインストールすれば、バンドルされてる
・「https」は非対応?
・abコマンドを実行するマシンのスペックにも左右される
・ネットワーク的に近いマシンから実行するほうが、障害となる要因がすくないので、より現実的なテストになる(と思う)
・Windows用のApacehBenchはとてつもなく遅い気がするので、全然並列してくれていない(が、WSLからなら普通に早かった)
・社内NWからとかは怒られちゃうからやめようね
# ab -n 100 -c 10 https://vamdemicsystem.black/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking vamdemicsystem.black (be patient).....done
Server Software: Apache/2.4.6
Server Hostname: vamdemicsystem.black
Server Port: 80
Document Path: /
Document Length: 213 bytes
Concurrency Level: 10
Time taken for tests: 0.131 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 46000 bytes
HTML transferred: 21300 bytes
Requests per second: 761.10 [#/sec] (mean)
Time per request: 13.139 [ms] (mean)
Time per request: 1.314 [ms] (mean, across all concurrent requests)
Transfer rate: 341.90 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 6 0.8 6 8
Processing: 5 6 1.0 6 11
Waiting: 5 6 1.0 6 11
Total: 10 12 1.4 13 17
Percentage of the requests served within a certain time (ms)
50% 13
66% 13
75% 13
80% 13
90% 14
95% 14
98% 17
99% 17
100% 17 (longest request)
このようなメッセージが出力されるときは、プロセスがオープンできるファイルディスクリプタの上限にあたってしまっているということ。
上限まできているのは、abコマンドを実行しているマシン。相手先ではないよ。
socket: Too many open files (24)
なので、上限をulimitコマンドで増やしてあげる。
# ulimit -n 1024 # ulimit -n 204800 # ulimit -n 204800

負荷テストは、シナリオの立て方によって、想定した運用と違う負荷をかけてしまい、判断を誤る場合がよくあります。
たとえば、1000人が同時アクセスして、入力して、処理を実行する、といった場合、入力画面がひらいたら、すぐにリクエストを投げるというシナリオを組んでしまうと、想定より高い負荷をかけてしまうことになります。
また、リクエストごとにサイズが変化するページをテストする場合は、他の負荷テストツールを用いたほうがよいかもしれないですね。
あと、忘れてましたが、httpsにリクエストを投げるときは、absコマンドを使いますので、それでいけるかと。
ありがとうございます!なるほど勉強になります。
absっていうhttps対応のもあるんですね。参考にさせていただきます!