Question

J'essaie de comprendre comment utiliser ApacheBench et analyser mon site Web. J'ai installé le projet de site par défaut (c'est ASP.NET MVC, mais s'il vous plaît, ne mettez pas un arrêt de lecture si vous n'êtes pas une personne .NET).

Je n'ai rien changé. Ajouter un nouveau projet. Définissez la configuration sur RELEASE. Exécuter sans débogage. (donc c'est en mode LIVE). Oui, il s’agit du serveur Web intégré, et non de la version de production IIS, Apache ou autre.

Alors, voici les résultats: -

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        ASP.NET
Server Hostname:        localhost
Server Port:            50035

Document Path:          /
Document Length:        1204 bytes

Concurrency Level:      1
Time taken for tests:   2.371 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1504000 bytes
HTML transferred:       1204000 bytes
Requests per second:    421.73 [#/sec] (mean)
Time per request:       2.371 [ms] (mean)
Time per request:       2.371 [ms] (mean, across all concurrent requests)
Transfer rate:          619.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0      16
Processing:     0    2   5.5      0      16
Waiting:        0    2   5.1      0      16
Total:          0    2   5.6      0      16

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%     16
  95%     16
  98%     16
  99%     16
 100%     16 (longest request)

C:\Temp>

Maintenant, je ne suis pas sûr de ce que je devrais regarder.

Premièrement, je suis après le nombre de demandes par seconde. Donc, si nous devons gérer 300 reqs / sec, cela veut-il dire qu’il gère et que la moyenne est de 421 req par seconde?

Deuxièmement, quelle est la raison pour ajouter plus de concurrents? Comme dans, si j'ai 1000 hits sur 1 concurrent, en quoi cela diffère-t-il de 500 sur 2 concurrents? Est-ce pour vérifier s'il y a du code qui bloque d'autres demandes?

Enfin, y a-t-il quelque chose d'important que j'ai oublié de noter dans les résultats?

Merci :))

Était-ce utile?

La solution

  

quelle est la raison pour ajouter plus   concurrent? Comme dans, si j'ai 1000 hits   sur 1 concurrent, en quoi est-ce différent   à 500 sur 2 concurrents? Est-ce pour tester   s'il y a du code qui bloque d'autres   demandes?

C'est un peu ça, oui: votre application est probablement en train de faire des choses où la simultanéité peut causer des problèmes.

Quelques exemples:

  • une page tente d'accéder à un fichier - en le verrouillant dans le processus; cela signifie que si une autre page doit accéder au même fichier, elle devra attendre que la première page ait fini de fonctionner avec.
  • tout à fait la même chose pour l’accès à la base de données: si une page écrit dans une base de données, il existe une sorte de mécanisme de verrouillage (qu’il soit basé sur une table, sur une ligne ou autre, selon votre SGBD)

Les tests avec une concurrence de un sont acceptables ... tant que votre site Web n'aura jamais plus d'un utilisateur à la fois. ce qui n’est pas réaliste, j’espère pour vous.


Vous devez penser au nombre d'utilisateurs qui seront sur le site en même temps, une fois en production - et ajuster la simultanéité; Rappelez-vous que 5 utilisateurs simultanément sur votre site ne signifient pas que vous devez tester avec une simultanéité de 5 avec ab:

  • Les vrais utilisateurs attendront quelques secondes entre chaque requête (temps nécessaire pour lire la page, cliquer sur un lien, ...)
  • ab n'attend pas du tout: chaque fois qu'une page est chargée (c'est-à-dire qu'une requête est terminée), il en lance une autre!


En outre, deux autres choses:

  • ab ne teste que pour une seule page - les vrais utilisateurs naviguent sur l’ensemble du site Web, ce qui pourrait entraîner des problèmes de simultanéité que vous n’auriez pas lors du test d’une seule page
  • ab charge une seule page: il ne demande pas de ressources externes (pensez CSS, images, JS, ...); ce qui signifie que vous aurez beaucoup d'autres demandes, même si elles ne sont pas vraiment coûteuses, lorsque votre site est en production.

Sidenote: vous voudrez peut-être jeter un coup d’œil à d’autres outils qui peuvent effectuer des tests beaucoup plus complets, comme siège , Jmeter , ou OpenSTA : ab est vraiment agréable lorsque vous souhaitez mesurer si quelque chose que vous avez fait consiste à optimiser votre page ou non; mais si vous voulez simuler " real " utilisation de votre site, ceux-ci sont beaucoup plus adaptés.

Autres conseils

Oui, si vous voulez savoir combien de requêtes par seconde votre site est capable de servir, consultez la " Requêtes par seconde " ligne. Dans votre cas, c’est vraiment très simple puisque vous avez exécuté un ab avec une simultanéité égale à 1. Chaque demande n’a pris en moyenne que 2,381 ms. 421 d'entre eux, l'un après l'autre, prennent 1 seconde.

Vous devriez vraiment jouer un peu avec la concurrence d'accès pour évaluer avec précision la capacité de votre site. Jusqu'à un certain degré de simultanéité, vous pouvez vous attendre à une augmentation du débit, car plusieurs demandes sont gérées en parallèle par IIS. Par exemple. si votre serveur a plusieurs processeurs / cœurs. De plus, si une page repose sur des E / S externes (service de niveau intermédiaire ou appels à une base de données), le processeur peut travailler sur une requête, tandis qu'une autre attend la fin de l'IO. À un moment donné, le nombre de requêtes / s se stabilisera avec l'augmentation de la concurrence et vous constaterez une augmentation de la latence. Augmentez encore plus la concurrence et vous verrez votre débit diminuer (req / s), car le serveur doit consacrer plus de ressources à la gestion de toutes ces demandes simultanées.

Cela dit, la majorité de vos demandes nous sont renvoyées dans un délai de 2 ms environ. C'est sacrément rapide, alors j'imagine qu'il n'y a pas grand chose à faire en matière d'appels de base de données ou de niveau intermédiaire, et votre système est probablement saturé en cpu lorsque le test est en cours d'exécution (ou quelque chose ne va pas et échoue très vite. Sont c’est-à-dire la page sur laquelle vous pensez que vous testez une taille de 1204 octets?). Ce qui soulève un autre point: ab lui-même consomme du cpu aussi, surtout une fois que vous avez augmenté la concurrence. Donc, vous voulez exécuter un ab sur une autre machine.

De même, si votre site passe des appels externes vers des services de niveau intermédiaire ou des bases de données, vous souhaitez ajuster votre machine.config afin d'optimiser le nombre de threads alloués par IIS: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

Et juste un petit détail: les statistiques de temps prises sont effectuées par incréments de ~ 16 ms, ce qui semble être la granularité du minuteur utilisé. C'est à dire. 80% de vos réponses n'ont pas pris 0 ms, elles ont pris un certain temps & Lt; 16 ms.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top