Apache ab: veuillez expliquer la sortie

31

J'ai regardé autour de moi et je ne trouve aucune explication détaillée de la sortie. La plupart est en effet facile à comprendre, mais il y a une partie qui me déconcerte:

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

Cela signifie - pour moi - que si vous mesurez toutes les demandes simultanées (quoi que cela signifie), les demandes sont soudainement retournées 100 fois plus rapidement. Pourquoi le temps par demande changerait-il autant? Cela n'a aucun sens.

Y a-t-il une explication détaillée de cela et d'autres parties de la sortie ab?

Mei
la source

Réponses:

53

Si la simultanéité est définie sur 1, il n'y a aucune différence entre ces deux. Cela commence à avoir de l'importance lorsque plus d'une demande est effectuée simultanément.

Regardons un exemple de ce que je reçois sur mon localhost:

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

va donner:

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)

Cela signifie que 3,912 secondes ont été nécessaires pour effectuer 1000 requêtes une par une. Une seule requête a donc nécessité 3,912 secondes / 1000 = 3,912 ms en moyenne.

Maintenant, augmentons un peu le niveau de concurrence:

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)

Cette fois, au lieu de 3,912 secondes, nous n'avons besoin que de 0,730 seconde pour faire le travail. Nous avons effectué 1000 requêtes en 0,730 seconde, donc une requête prendrait en moyenne 0,730 seconde / 1000 = 0,730 ms (dernière ligne). Mais la situation est un peu différente, car nous effectuons actuellement 10 demandes simultanément. Donc, en fait, notre numéro ici ne reflète pas le temps réel qu'il faut pour qu'une seule demande soit traitée . 0,730 ms * 10 (nombre de requêtes simultanées) = 7,303 ms. C'est le temps qu'il faut en moyenne pour qu'une seule demande se termine si elle était exécutée de manière non simultanée (ou plus correctement, de manière isolée au niveau de concurrence actuel).

Le dernier nombre que vous voyez (0,730 ms) est utilisé pour indiquer approximativement combien le temps total augmenterait si vous avez ajouté 1 requête ( -n 1001) en utilisant le niveau de concurrence actuel -c 10(enfin du moins en théorie, il en est ainsi).

Les 7,303 ms vous donnent un aperçu de la durée d'une seule requête isolée.

Le changement que vous voyez entre l'exemple -c 1et -c 10:

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

signifie qu'une seule requête s'exécute plus rapidement si elle est la seule en cours d'exécution -c 1. S'il y a plusieurs demandes en -c 10concurrence pour les ressources, une seule demande prendra plus de temps. Mais si vous tenez compte du fait que vous effectuez 10 demandes de ce type en même temps, dans ce 7,303 ms, vous traitez 10 demandes au lieu d'une.

Donc, comme mesure du retard pour une seule demande - le 7,303 ms est plus utile. Mais en tant que mesure des performances , 0,730 ms est plus significatif. En fait, comme 0,730 ms <3,912 ms, vous voyez que vous serez en mesure de traiter plus de requêtes par seconde sur l'ensemble si vous autorisez 10 requêtes simultanées.

Karol J. Piczak
la source