サーバーの容量に関する情報を収集して、これらのApache abテストを実行しようとしています。
1、10、100、1000の同時実行性で1分間テストしました。以下の結果は、1000人の同時ユーザーの場合です
私はこのベンチマークスクリプトを使用しています- https://github.com/odan/benchmark-php/blob/master/benchmark.php 変更したのは、MySQLベンチマーク(100万、エンコード)を置き換えることだけです。 (...))別の単純なベンチマーク(100万、1 + 1)を使用したクエリ
スクリプトの完了には約0.52秒かかるので、理想的な状況では、1分で約115のリクエストが完了すると予想されます。
の結果 ab -t 60 -n 5000 -kc 1000 mydomain-name/benchmark.php
Benchmarking mydomain-name (be patient)
Finished 111 requests
Server Software: Apache/2.4.18
Document Path: /benchmark.php
Document Length: 4210 bytes
Concurrency Level: 1000
Time taken for tests: 60.383 seconds
Complete requests: 111
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 486180 bytes
HTML transferred: 467310 bytes
Requests per second: 1.84 [#/sec] (mean)
Time per request: 543987.550 [ms] (mean)
Time per request: 543.988 [ms] (mean, across all concurrent requests)
Transfer rate: 7.86 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 57 136 42.2 140 199
Processing: 2362 30681 16963.4 31249 60180
Waiting: 2362 30680 16963.4 31248 60180
Total: 2425 30817 17005.2 31389 60378
Percentage of the requests served within a certain time (ms)
50% 31306
66% 39785
75% 45021
80% 47629
90% 54320
95% 57756
98% 58191
99% 59632
100% 60378 (longest request)
したがって、1000の同時実行レベルで111のリクエストが完了したことがわかります。私の質問は:
1)2つのTime per requests
値。ブラウザでチェックインすると、スクリプトの実行に約520ミリ秒かかることがわかっています。それで、543.988 [ms]の2番目の値(すべての同時リクエスト全体の平均)は、テストの実行中のリクエストごとの実際の時間ですか?リクエストごとの初回値543987.550はちょうど次のようです:543.988 x 1000(同時ユーザー)?つまり、テストの実行に約54秒かかったということですか(「テストにかかる時間」は60.383秒と言っています)。
私がやろうとしていることは、それがサーバーのパフォーマンスに影響を及ぼし始める時点を知ることです。上記を1000の同時実行レベルで見ると、平均時間543ミリ秒で、毎秒1.84リクエストを処理できます。これは、負荷がない場合に期待されることです。
ここに興味がある場合は、10と100の同時実行レベルのデータです。
ab -t 60 -k -n 500 -c 10 mydomain-name/benchmark.php
Benchmarking mydomain-name (be patient)
Completed 100 requests
Finished 111 requests
Document Path: /benchmark.php
Document Length: 4210 bytes
Concurrency Level: 10
Time taken for tests: 60.038 seconds
Complete requests: 111
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 486180 bytes
HTML transferred: 467310 bytes
Requests per second: 1.85 [#/sec] (mean)
Time per request: 5408.824 [ms] (mean)
Time per request: 540.882 [ms] (mean, across all concurrent requests)
Transfer rate: 7.91 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 11 1.5 11 20
Processing: 1743 5170 647.3 5251 6893
Waiting: 1743 5169 647.3 5251 6892
Total: 1754 5181 647.5 5262 6906
Percentage of the requests served within a certain time (ms)
50% 5260
66% 5308
75% 5370
80% 5391
90% 5441
95% 5510
98% 5540
99% 5967
100% 6906 (longest request)
100人の同時ユーザーで同じテストを繰り返しました。
ab -t 60 -n 2000 -c 100 -k mydomain-name/benchmark.php
Benchmarking mydomain-name (be patient)
Finished 114 requests
Server Software: Apache/2.4.18
Server Port: 80
Document Path: /benchmark.php
Document Length: 4210 bytes
Concurrency Level: 100
Time taken for tests: 60.683 seconds
Complete requests: 114
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 499320 bytes
HTML transferred: 479940 bytes
Requests per second: 1.88 [#/sec] (mean)
Time per request: 53230.746 [ms] (mean)
Time per request: 532.307 [ms] (mean, across all concurrent requests)
Transfer rate: 8.04 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 21 4.0 21 28
Processing: 1932 30540 16362.9 30710 54039
Waiting: 1931 30539 16362.9 30710 54038
Total: 1953 30561 16362.6 30732 54066
Percentage of the requests served within a certain time (ms)
50% 30732
66% 41063
75% 46327
80% 48960
90% 52212
95% 52273
98% 52288
99% 52840
100% 54066 (longest request)
実際に表示されているのは、リクエスト処理を「シリアル化」しているアプリケーションです。つまり、発行されているリクエストの数に関係なく、一度に1つのリクエストしか処理されていません。
同時実行レベル(常に約1.8)全体でのRPSの一貫性に注意してください。1.8は、単一の要求のサービス時間の約1 /サービス時間(.53秒)です。
アプリケーションは1または10または100または1000のリクエストを受け取り、そのうちの1つを選択し、残りをキューに入れ(これは内部でさまざまな方法で行われます)、選択したものを.53秒で処理し、結果を返し、次に選択します。 60秒間キューに入れられ、処理され、完了し、結果を返すなどの別の要求。
つまり、これはこの構成の「容量」であり、1秒あたり2リクエスト弱です。これは、着信同時リクエストレートとは無関係です。
これは1993年ではなく2018年なので、おそらく修正する必要があります。 :)適切なサイズで構成された単一のノードでPHPを使用すると、数百から数千のリクエスト/秒を実行できるはずです。
なぜリクエストがシリアライズされるのですか?それは、ベンチマークスクリプトの何か-ロックを取得するか、他のシリアル化されたアクションを実行する-またはサーバー構成の何か-Webサーバーワーカーの数などのいずれかです。それがわからない場合は、詳細と誰かで別の質問を作成してくださいおそらく助けることができます。