Apache ab: por favor, explique a saída

31

Eu olhei em volta e não consigo encontrar nenhuma explicação detalhada da saída. A maioria é realmente fácil de entender, mas há uma parte que me deixa desconcertada:

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

Isso significa - para mim - que, se você medir em todas as solicitações simultâneas (o que isso significa), as solicitações serão repentinamente retornadas 100x mais rápido. Por que o tempo por solicitação muda tanto? Isso não faz sentido.

Existe alguma explicação detalhada dessa e de outras partes da saída ab?

Mei
fonte

Respostas:

53

Se você tiver a concorrência definida como 1, não haverá diferença entre os dois. Começa a importar quando você tem mais de uma solicitação executada simultaneamente.

Vejamos um exemplo do que recebo no meu localhost:

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

darei:

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)

Isso significa que foram necessários 3,912 segundos para executar 1000 solicitações, uma por uma. Portanto, uma única solicitação precisava de 3,912 segundos / 1000 = 3,912 ms, em média.

Agora vamos reforçar um pouco o nível de simultaneidade:

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)

Desta vez, em vez de 3,912 segundos, precisamos de apenas 0,730 segundos para concluir o trabalho. Executamos 1000 solicitações em 0,730 segundos, portanto, uma solicitação levaria em média 0,730 segundos / 1000 = 0,730 ms (última linha). Mas a situação é um pouco diferente, pois agora estamos executando 10 solicitações simultaneamente. Portanto, nosso número aqui não está refletindo o tempo real necessário para que uma solicitação seja concluída . 0,730 ms * 10 (número de solicitações simultâneas) = ​​7,303 ms. É o tempo que leva, em média, para que uma única solicitação seja concluída se for executada de forma não simultânea (ou mais corretamente, de maneira isolada no atual nível de simultaneidade).

O último número que você vê (0,730 ms) é usado para dizer aproximadamente quanto tempo aumentaria se você adicionasse 1 solicitação ( -n 1001) usando o nível de simultaneidade atual -c 10(pelo menos teoricamente é isso).

Os 7,303 ms fornecem uma visão geral de quanto tempo uma única solicitação isolada seria executada.

A alteração que você vê entre exemplo -c 1e -c 10:

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

significa que uma única solicitação é executada mais rapidamente se for a única sendo executada -c 1. Se houver várias solicitações -c 10competindo por recursos, uma única solicitação levará mais tempo para ser concluída. Mas se você levar em consideração o fato de estar executando 10 dessas solicitações ao mesmo tempo, nesses 7,303 ms, você lida com 10 solicitações em vez de 1.

Portanto, como uma medida de atraso para uma única solicitação - os 7,303 ms são mais úteis. Mas como uma medida de desempenho - 0,730 ms é mais significativo. De fato, como 0,730 ms <3,912 ms, você verá que poderá atender a mais solicitações por segundo no agregado se permitir 10 solicitações simultâneas.

Karol J. Piczak
fonte