Apacheベンチツール(ab
)を使用してWebサイトの負荷テストを行うプロセスを誰かに教えてもらえますか?
以下について知りたい:
サイトは1分あたり何人で処理できますか?
これを理解するために実行する必要があるコマンドについて説明してください。
私はすべてのチュートリアルを試しましたが、それらは混乱しています。
Apacheベンチツール(ab
)を使用してWebサイトの負荷テストを行うプロセスを誰かに教えてもらえますか?
以下について知りたい:
サイトは1分あたり何人で処理できますか?
これを理解するために実行する必要があるコマンドについて説明してください。
私はすべてのチュートリアルを試しましたが、それらは混乱しています。
回答:
Apacheベンチマークツールは非常に基本的なものであり、ある程度のパフォーマンスは確実に得られますが、サイトを本番環境で深刻なストレスにさらすことを計画している場合にのみ、これに依存することは悪い考えです。
そうは言っても、最も一般的で最も単純なパラメーターは次のとおりです。
-c
:( "並行性")。同時にサイトにアクセスするクライアント(ユーザー/ユーザー)の数を示します。ab
実行中は、-c
クライアントがサイトにアクセスします。これは、ベンチマーク中にサイトが受けるストレスの量を実際に決定するものです。
-n
:いくつのリクエストが行われるかを示します。これはベンチマークの長さを決定するだけです。サーバーがサポートできる値の高い-n
値-c
は、持続的なストレスの下で物事が壊れないようにするための良いアイデアです。5時間よりも5秒間ストレスをサポートすることは同じではありません。
-k
:これは、本来「KeepAlive」機能ブラウザが行うことです。-k
「ブール値」であるため、値を渡す必要はありません(つまり、テストでHTTPのKeep Aliveヘッダーを使用して接続を維持する必要があることを示します)。ブラウザーがこれを行うため、サイトがブラウザーから受けるストレスとフローをシミュレートしたい場合があるため、これを使用してベンチマークを行うことをお勧めします。
最後の引数は単にホストです。指定しない場合、デフォルトではhttp://プロトコルにヒットします。
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をどれだけ大きくできるかを確認します。
私はこれを明確に説明したことを願っています:)
-l
ますが、ページに動的コンテンツがある場合は、オプションを追加することをお勧めします。これにより、リクエスト間でコンテンツの長さが異なるため、失敗したリクエストの束が得られません。
これを理解するために実行する必要があるコマンドについて説明してください。
実行できる最も簡単なテストは、一度に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に指示します。
-k
KeepAlive
ヘッダーを送信します。ヘッダーは、各リクエストの完了後に接続をシャットダウンしないで、代わりに再利用するようにWebサーバーに要求します。
Accept-Encoding: gzip, deflate
mod_deflateはほとんどの場合、text / html出力を25%〜75%圧縮するために使用されるため、追加のヘッダーも送信します-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分あたりのリクエスト数になります。
実際の結果を得るには、静的HTMLまたはindex.phpファイルの代わりにWordpressをテストする必要があります。複雑なPHPコードや複数のMySQLクエリなど、すべてが一緒に実行される方法を知る必要があるためです。
たとえば、次の例は、同じシステムとWAMP環境でWordpressのフレッシュインストールをテストした結果です(私はWampDeveloperを使用していますが、Xampp、WampServerなどもあります)...
Requests per second: 18.68 [#/sec] (mean)
これは37倍遅くなります。
負荷テストの後、全体的なパフォーマンス(1秒あたりのリクエスト数)を改善し、より大きな負荷(たとえば、Apacheを増加させる傾向とApacheをクラッシュ-n
する-c
傾向)の下でWebサーバーをより安定させるためにできることがいくつかあります。ここについて読むことができます:
WindowsでApache Bench(AB)をセットアップする手順(IMO-推奨)。
ステップ1-Xamppをインストールします。
手順2-CMDを開きます。
手順3- cd C:\xampp\apache\bin
CMDからApacheベンチの宛先に移動()
手順4-コマンドを貼り付け(ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/
)
手順5-待機します。やった
また、Apache absを使用してスクリプトの速度を測定できるか、phpメジャースクリプトまたはphp拡張機能を構成/破壊できるかどうかも知りました。
最後の2つは私にとって失敗しました。これらはおおよそのものです。その後、「ab」と「abs」を試してみようと思いました。
コマンド "ab -k -c 350 -n 20000 example.com/"は、すべてが簡単であるため美しいです。
しかし、誰かが、たとえばwww.apachefriends.orgなどの任意のApacheサーバーで「localhost」を考えましたか?
ルートに「bench」などの2つのファイルがあるフォルダーを作成する必要があります。「bench.php」をテストし、「void.php」を参照します。
<?php
for($i=1;$i<50000;$i++){
print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>
<?php
?>
"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
さて、注意深く見れば......
voidスクリプトはゼロの結果を生成しません!!! 結論は次のとおりです。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私が期待する結果です!
abだけを使用してAPIの負荷テストを行うだけでは不十分です。しかし、あなたのサイトがどのように機能しているかの基本的な考えをあなたに与えるための素晴らしいツールだと思います。
でabコマンドを使用して、異なるデータを持つ複数のAPIエンドポイントを同時にバックグラウンドでテストする場合は、「nohup」コマンドを使用する必要があります。ターミナルを閉じても、コマンドは実行されます。
プロセス全体を自動化する簡単なスクリプトを書いたので、それを自由に使用してください。http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script