Apache ab: Bitte erläutern Sie die Ausgabe

31

Ich habe mich umgesehen und kann keine detaillierte Erklärung für die Ausgabe finden. Das meiste ist in der Tat leicht zu verstehen, aber es gibt einen Teil, der mich verblüfft:

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

Für mich bedeutet dies, dass, wenn Sie alle gleichzeitigen Anforderungen messen (was auch immer das bedeutet), die Anforderungen plötzlich 100-mal schneller zurückgegeben werden. Warum ändert sich die Zeit pro Anfrage so sehr? Das macht keinen Sinn.

Gibt es eine detaillierte Erklärung für diesen und andere Teile der ab-Ausgabe?

Mei
quelle

Antworten:

53

Wenn Sie die Parallelität auf 1 festgelegt haben, gibt es keinen Unterschied zwischen diesen beiden. Es ist von Bedeutung, wenn mehr als eine Anforderung gleichzeitig ausgeführt wird.

Schauen wir uns ein Beispiel an, was ich auf meinem bekomme localhost:

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

wird geben:

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)

Dies bedeutet, dass 3,912 Sekunden benötigt wurden, um 1000 Anforderungen nacheinander auszuführen. Eine einzelne Anforderung benötigte also durchschnittlich 3,912 Sekunden / 1000 = 3,912 ms.

Lassen Sie uns nun die Nebenläufigkeit etwas aufbessern:

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)

Dieses Mal benötigen wir anstelle von 3,912 Sekunden nur 0,730 Sekunden, um die Arbeit zu erledigen. Wir haben 1000 Anfragen in 0,730 Sekunden ausgeführt, daher würde eine Anfrage durchschnittlich 0,730 Sekunden / 1000 = 0,730 ms (letzte Zeile) dauern. Die Situation ist jedoch etwas anders, da wir jetzt 10 Anfragen gleichzeitig ausführen. Tatsächlich spiegelt unsere Nummer hier nicht die Echtzeit wider, die für die Fertigstellung einer Anfrage benötigt wird . 0,730 ms * 10 (Anzahl gleichzeitiger Anforderungen) = 7,303 ms. Dies ist die durchschnittliche Zeit, die eine einzelne Anforderung benötigt, um ausgeführt zu werden, wenn sie nicht gleichzeitig ausgeführt wurde (oder genauer gesagt, isoliert auf der aktuellen Parallelitätsebene).

Die letzte angezeigte Zahl (0,730 ms) gibt ungefähr an, wie viel mehr Zeit benötigt wird, wenn Sie 1 Anforderung ( -n 1001) unter Verwendung der aktuellen Parallelitätsebene hinzugefügt haben -c 10(zumindest theoretisch).

Die 7,303 ms geben Ihnen einen Überblick darüber, wie lange eine einzelne isolierte Anforderung ausgeführt werden würde.

Der Wechsel zwischen Beispiel -c 1und -c 10:

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

bedeutet, dass eine einzelne Anforderung schneller ausgeführt wird, wenn sie als einzige ausgeführt wird -c 1. Wenn mehrere Anforderungen -c 10um Ressourcen konkurrieren, dauert die Ausführung einer einzelnen Anforderung länger. Wenn Sie jedoch berücksichtigen, dass Sie 10 solcher Anforderungen gleichzeitig ausführen, werden in dieser Zeit von 7,303 ms 10 Anforderungen anstelle von 1 behandelt.

Als Maß für die Verzögerung für eine einzelne Anforderung sind die 7,303 ms nützlicher. Aber als Maß für die Leistung ist 0,730 ms sinnvoller. Tatsächlich sehen Sie mit 0,730 ms <3,912 ms, dass Sie insgesamt mehr Anforderungen pro Sekunde bedienen können, wenn Sie 10 gleichzeitige Anforderungen zulassen.

Karol J. Piczak
quelle