Apache ab: explique el resultado

31

He mirado a mi alrededor y no puedo encontrar ninguna explicación detallada de la salida. La mayoría es fácil de entender, pero hay una parte que me desconcierta:

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

Esto significa, para mí, que si mide en todas las solicitudes concurrentes (lo que sea que eso signifique), las solicitudes se devuelven de repente 100 veces más rápido. ¿Por qué cambiaría tanto el tiempo por solicitud? Esto no tiene sentido.

¿Hay alguna explicación detallada de esta y otras partes de la salida ab?

Mei
fuente

Respuestas:

53

Si tiene la concurrencia establecida en 1, no hay diferencia entre esos dos. Comienza a importar cuando tiene más de 1 solicitud realizada simultáneamente.

Veamos un ejemplo de lo que obtengo en mi localhost:

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

daré:

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)

Esto significa que se necesitaron 3.912 segundos para realizar 1000 solicitudes una por una. Por lo tanto, una sola solicitud necesitaba 3.912 segundos / 1000 = 3.912 ms en promedio.

Ahora fortalezcamos un poco el nivel de concurrencia:

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)

Esta vez, en lugar de 3.912 segundos, solo necesitamos 0.730 segundos para hacer el trabajo. Hemos realizado 1000 solicitudes en 0.730 segundos, por lo que una solicitud tomaría un promedio de 0.730 segundos / 1000 = 0.730 ms (última línea). Pero la situación es un poco diferente, ya que ahora estamos realizando 10 solicitudes al mismo tiempo. De hecho, nuestro número aquí no refleja el tiempo real que toma completar una solicitud . 0.730 ms * 10 (número de solicitudes concurrentes) = 7.303 ms. Ese es el tiempo que toma en promedio completar una sola solicitud si se ejecutó de manera no concurrente (o más correctamente, de manera aislada en el nivel de concurrencia actual).

El último número que ve (0.730 ms) se usa para indicar aproximadamente cuánto aumentaría el tiempo total si hubiera agregado 1 solicitud ( -n 1001) usando el nivel de concurrencia actual -c 10(bueno, al menos en teoría es así).

El ms 7.303 le da una visión general de cuánto tiempo se ejecutará una sola solicitud aislada.

El cambio que ves entre el ejemplo -c 1y -c 10:

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

significa que una sola solicitud se ejecuta más rápido si es la única que se está ejecutando -c 1. Si hay varias solicitudes que -c 10compiten por los recursos, una sola solicitud tardará más en completarse. Pero si tiene en cuenta el hecho de que está realizando 10 de estas solicitudes al mismo tiempo, en este 7.303 ms, se ocupará de 10 solicitudes en lugar de 1.

Entonces, como medida de demora para una sola solicitud , los 7.303 ms son más útiles. Pero como medida de rendimiento , 0.730 ms es más significativo. De hecho, como 0.730 ms <3.912 ms, verá que podrá atender más solicitudes por segundo en conjunto si permite 10 solicitudes simultáneas.

Karol J. Piczak
fuente