web-dev-qa-db-ja.com

Apache ab-1000の同時実行性でテスト

サーバーの容量に関する情報を収集して、これらの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)
2
TigerTiger

実際に表示されているのは、リクエスト処理を「シリアル化」しているアプリケーションです。つまり、発行されているリクエストの数に関係なく、一度に1つのリクエストしか処理されていません。

同時実行レベル(常に約1.8)全体でのRPSの一貫性に注意してください。1.8は、単一の要求のサービス時間の約1 /サービス時間(.53秒)です。

アプリケーションは1または10または100または1000のリクエストを受け取り、そのうちの1つを選択し、残りをキューに入れ(これは内部でさまざまな方法で行われます)、選択したものを.53秒で処理し、結果を返し、次に選択します。 60秒間キューに入れられ、処理され、完了し、結果を返すなどの別の要求。

つまり、これはこの構成の「容量」であり、1秒あたり2リクエスト弱です。これは、着信同時リクエストレートとは無関係です。

これは1993年ではなく2018年なので、おそらく修正する必要があります。 :)適切なサイズで構成された単一のノードでPHPを使用すると、数百から数千のリクエスト/秒を実行できるはずです。

なぜリクエストがシリアライズされるのですか?それは、ベンチマークスクリプトの何か-ロックを取得するか、他のシリアル化されたアクションを実行する-またはサーバー構成の何か-Webサーバーワーカーの数などのいずれかです。それがわからない場合は、詳細と誰かで別の質問を作成してくださいおそらく助けることができます。

1
Jonah Benton