web-dev-qa-db-ja.com

Apache ab:出力について説明してください

私は周りを見回しましたが、出力の詳細な説明はまったく見つかりません。ほとんどは確かに理解しやすいですが、私を混乱させる1つの部分があります。

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

つまり、私にとっては、すべての同時リクエストを測定すると(それが何であれ)、リクエストが突然100倍速く返されるということです。なぜリクエストごとの時間がそれほど変化するのですか?これは意味がありません。

これとab出力の他の部分の詳細な説明はありますか?

31
Mei

同時実行数を1に設定している場合、違いはありませんこれら2つの間。複数のリクエストを同時に実行すると、問題が発生し始めます。

私がlocalhostで得たものの例を見てみましょう:

ab -c 1 -n 1000 http://localhost/

あげる:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

つまり、1000個のリクエストを1つずつ実行するには3.912秒かかりました。したがって、単一のリクエストでは3.912秒/ 1000 =平均で3.912ミリ秒必要でした。

次に、並行性レベルを少し強化しましょう。

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

今回は3.912秒ではなく、0.730秒で十分です。 0.730秒で1000リクエストを実行したため、1つのリクエストには平均で0.730秒/ 1000 = 0.730ミリ秒(最終行)かかります。ただし、現在は10個のリクエストを同時に実行しているため、状況は少し異なります。したがって、実際にはここでの数値は、1つの要求が完了するまでにかかるリアルタイムを反映していないです。 0.730 ms * 10(同時リクエスト数)= 7.303 ms。これは、1つの要求が非並行で(より正確には、現在の同時実行レベルで分離された方法で)実行された場合に、平均で完了するまでにかかる時間です。

最後に表示される数値(0.730ミリ秒)を使用して、1つのリクエスト(-n 1001)現在の同時実行レベルを使用-c 10(まあ、少なくとも理論的にはそうです)。

7.303 msは、単一の分離されたリクエストが実行される時間の概要を示します。

例の間に見られる変化-c 1および-c 10

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

実行中のリクエストが1つだけの場合、1つのリクエストがより速く実行されることを意味します-c 1。複数のリクエストがある場合-c 10リソースをめぐって競合しているため、1つのリクエストの完了に時間がかかります。ただし、このような要求を10個同時に実行しているという事実を考慮すると、この7.303ミリ秒では、1個ではなく10個の要求が処理されます。

つまり単一のリクエストの遅延の測定-7.303 msの方が便利です。しかしパフォーマンスの測定-0.730 msの方がより意味があります。実際、0.730ミリ秒<3.912ミリ秒であるため、10の同時リクエストを許可すると、1秒あたりのリクエストの合計をより多く処理できることがわかります。

53
Karol J. Piczak