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


31

私は見て回ったが、出力の詳細な説明をまったく見つけることができません。ほとんどは実際に理解するのは簡単ですが、私を混乱させる部分が1つあります。

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

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

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

回答:


53

並行性を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。これは、単一のリクエストが非並行に実行された場合(または、より正確に、現在の並行性レベルで分離された方法で実行された場合)に完了するのに平均でかかる時間です。

最後に表示される数値(0.730ミリ秒)は、-n 1001現在の同時実行レベルを使用して1つの要求()を追加した場合に合計時間がどれだけ増加するかを示すために使用されます-c 10(少なくとも理論的にはそうです)。

7.303ミリ秒では、1つの分離されたリクエストが実行される時間の概要がわかります。

-c 1と次の間に表示される変更-c 10

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.