web-dev-qa-db-ja.com

ab負荷テスト

Apacheベンチツールab)を使って自分のウェブサイトをテストする方法を誰かが教えてください。

私は以下のことを知りたいのです。

1分あたり何人のサイトが処理できますか?

これを理解するために実行すべきコマンドを見てください。

私はすべてのチュートリアルを試しましたが、混乱しています。

172
jewelwast

Apacheベンチマークツールは非常に基本的なものであり、ある程度のパフォーマンスについてはしっかりとした考えを与えることができますが、あなたのサイトを本気にさらすことを計画している場合はそれに頼るのは悪い考えです。生産におけるストレス。

そうは言っても、これが最も一般的で最も単純なパラメータです。

-c:( "Concurrency")。同時にサイトにアクセスするクライアント(人/ユーザー)の数を示します。 abの実行中、サイトにアクセスしている-cクライアントが存在します。これが実際にあなたのサイトがベンチマークの間に受けるであろうストレスの量を決めるものです。

-n:いくつのリクエストが行われるのかを示します。これはベンチマークの長さを決めるだけです。あなたのサーバがサポートできる-n値と一緒の高い-c値は、物事が持続的なストレスの下で壊れないことを確実にするために良い考えです。

-k:これは、 "KeepAlive"機能ブラウザが本来行うことです。 -kの値は "boolean"なので渡す必要はありません(つまり、HTTPのKeep Aliveヘッダーを使用して接続を維持することをテストに望んでいることを示しています)。ブラウザがこれを行い、あなたのサイトがブラウザから受けるストレスとフローをシミュレートしたいと思う可能性があるので、これを使ってベンチマークをすることをお勧めします。

最後の引数は単にホストです。指定しなければ、デフォルトでhttp:// protocolになります。

ab -k -c 350 -n 20000 example.com/

上記のコマンドを発行することで、2万の要求が満たされるまで350同時接続で http://example.com/ を押すことになります。キープアライブヘッダーを使用して行われます。

プロセスが2万件のリクエストを完了した後、あなたは統計についてのフィードバックを受けます。これは、上記のパラメータを使用したときに、サイトがあなたがそれをかけたストレスの下でどの程度うまく機能したかを教えてくれます。

サイトが同時に処理できる人数を確認するには、応答時間(平均、最大および最大応答時間、失敗した要求など)がサイトで許容できる数であるかどうかを確認してください(サイトごとに速度が異なる場合があります)。あなたが「私がそれを増やすなら、それは失敗した要求を受け始めて、それが壊れる」と言う場所に達するまであなたは異なる-c値でツールを走らせることができます。

Webサイトによっては、1分あたりの平均要求数が予想されます。これは非常にさまざまです、あなたはabでこれをシミュレートすることができないでしょう。しかし、これを次のように考えてください。平均的なユーザーが1分あたり5つの要求をヒットし、有効な平均応答時間が2秒である場合、1分のうち10秒が1人のユーザーに要求されます。その時間の1/6はサイトに当たるでしょう。これはまた、6人のユーザーが同時にabを使用してサイトにアクセスした場合、同時実行性レベル(-c)が6であっても、シミュレーションで36人のユーザーがいる可能性が高いことを意味します。

これは、サイトを使用しているユーザーから予想される動作によって異なりますが、「ユーザーは1分あたりX回の要求にアクセスすることが期待され、平均応答時間は2秒であれば有効です」から得られます。それから、2秒の平均応答時間に達するまで(ただし、最大応答時間とstddevがまだ有効であることを確認してください)-cレベルを変更して、-cをどれだけ大きくできるかを確認してください。

私はこの明確な説明を願っています:)頑張ってください

288
Mamsaac

これを理解するために実行すべきコマンドを見てください。

最も簡単なテストは、一度に10個ずつ、1000個の要求を実行することです(これは、テスト期間中、10人の同時ユーザーがそれぞれ100ページを取得するのをシミュレートします)。

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000は作成する要求の数です。

-c 10は、同時訪問者(順次訪問者に対して)をよりよくシミュレートするために、一度に1つの要求ではなく、一度に10の要求を実行するようにABに指示します。

-kKeepAliveヘッダーを送信します。これは、各要求が行われた後に接続をシャットダウンしないで、代わりにそれを再利用し続けるようにWebサーバーに要求します。

Mod_deflateはtext/htmlの出力を25%から75%に圧縮するためにほとんどの場合使用されるので、私は追加のヘッダーAccept-Encoding: gzip, deflateも送っています - その影響はWebサーバーの全体的なパフォーマンスへの影響のため無視できないはずです。 、同じ時間で2倍のデータを転送できます、など)。

結果:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

最も単純な解釈のために、この行のすべてを無視しなさい:

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

60倍すると、1分あたりのリクエスト数が増えます。

実際の結果を得るには、複雑なPHPコード、複数のMySQLクエリなど、すべてが一体となって機能する方法を知っている必要があるため、静的なHTMLファイルまたはindex.phpファイルの代わりにWordpressをテストします。 。

たとえば、これは同じシステムとWAMP環境でWordpressの新規インストールをテストした結果です(私はWampDeveloperを使用していますが、Xampp、WampServerなどもあります)。

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

37倍遅くなりました!

負荷テストの後、全体的なパフォーマンスを向上させるためにできること(Requests Per Second)、またより大きな負荷の下でWebサーバーをより安定させるためにできることがいくつかあります(例えば、-nを増やすと-cはApacheをクラッシュさせる傾向があります) 、あなたがここで読むことができること:

ABによるApacheの負荷テスト(Apache Bench)

64
rightstuff

Windows上にApache Bench(AB)をセットアップする手順(IMO - 推奨)。

ステップ1 - Xamppをインストールします。
ステップ2 - CMDを開きます。
ステップ3 - CMDからApacheベンチの宛先(cd C:\xampp\Apache\bin)に移動します
ステップ4 - コマンドを貼り付ける(ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/
ステップ5 - それを待ちます。あなたのやった

Abを使用してAPIを負荷テストするだけでは不十分です。しかし、私はそれがあなたのサイトがどのように高性能であるかについてあなたに基本的な考えを与えるための素晴らしいツールであると思います。

Abコマンドを使用して、異なるデータを含む複数のAPIエンドポイントをすべてバックグラウンドで同時にテストする場合は、 "Nohup"コマンドを使用する必要があります。端末を閉じてもコマンドは実行されます。

私は全体のプロセスを自動化する簡単なスクリプトを書きました、それを使ってもいいです: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-この単純なシェルスクリプトを使う

2
Ivan Kvasnica

私は私が私のスクリプトの速度をApache abs、あるいは構築/破壊するphp測定スクリプトあるいはphp拡張で測定できるかどうかに興味がありました。

最後の2つは私のために失敗しました:それらはおおよそです。その後、私は "ab"と "abs"を試すことを考えました。

"ab -k -c 350 -n 20000 example.com/"というコマンドはとても簡単です。

しかし、誰かがApacheサーバー上の "localhost"を考えたことはありませんか?例えばwww.apachefriends.org。

あなたは2つのファイルがあるルートに "bench"のようなフォルダを作るべきです:test "bench.php"と "void.php"を参照してください。

そしてそれを:ベンチマーク!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

デスクトップでは、次のように(Windowsでは).batファイルを使用する必要があります。

bench.bat

"c:\xampp\Apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\Apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

あなたが注意深く注意を払うなら今….

無効なスクリプトでは、結果がゼロになることはありません。 SO結論は次のとおりです。2番目の結果から最初の結果は減少するはずです。

ここで私が得た:

c:\xampp\htdocs\bench>"c:\xampp\Apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\Apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 =73私が期待する結果です!

0
Constantin