Je commence tout juste à utiliser AB aujourd'hui. Lisez quelques tutoriels AB sur les nouveaux et pensez à l'essayer pour tester la charge de mon site.
Après l'avoir utilisé quelques fois, j'ai reçu un grand nombre de demandes ayant échoué. Pouvez-vous expliquer ce que signifie une demande échouée? Comment puis-je en savoir plus sur ce problème?
Exemple de résultat AB:
-jailshell-3.2$ ab -n500 -c10 http://www.tweeting.tv/index.php
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> Apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.Apache.org/
Benchmarking www.tweeting.tv (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests
Server Software: Apache
Server Hostname: www.tweeting.tv
Server Port: 80
Document Path: /index.php
Document Length: 242861 bytes
Concurrency Level: 10
Time taken for tests: 97.846330 seconds
Complete requests: 500
Failed requests: 481
(Connect: 0, Length: 481, Exceptions: 0)
Write errors: 0
Non-2xx responses: 2
Total transferred: 121214449 bytes
HTML transferred: 121003283 bytes
Requests per second: 5.11 [#/sec] (mean)
Time per request: 1956.927 [ms] (mean)
Time per request: 195.693 [ms] (mean, across all concurrent requests)
Transfer rate: 1209.78 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1503 1675.5 1 9036
Processing: 130 393 285.1 319 2382
Waiting: 92 244 226.3 192 2180
Total: 153 1896 1726.2 1121 10374
Percentage of the requests served within a certain time (ms)
50% 1121
66% 3308
75% 3355
80% 3375
90% 3451
95% 3603
98% 4163
99% 9315
100% 10374 (longest request)
N.B. J'utilise le serveur partagé Hostgator Linux.
Il s'agit d'un problème avec les pages dynamiques, cela se produit car la longueur du contenu peut varier entre les demandes. Lorsque vous utilisez ab avec de telles pages, vous devez utiliser le -l
option.
-l Accept variable document length (use this for dynamic pages)
Les demandes ayant échoué sont toutes basées sur la longueur - c'est-à-dire le nombre de réponses qui ne correspondent pas exactement au nombre d'octets indiqué. Cela sera dû au contenu dynamique tel que les publicités, etc. qui sont diffusées différemment à chaque fois, ce n'est donc pas un problème.
Martin a raison. Plus utile, j'ai exécuté une boucle rapide contre nos serveurs de production:
{user@staging:~}$ for i in `seq 1 10`; do curl -sk https://app.copperegg.com/login > /tmp/lb$i.txt ; done
{user@staging:~}$ wc /tmp/lb*
74 239 3316 /tmp/lb1.txt
74 239 3324 /tmp/lb10.txt
74 239 3320 /tmp/lb2.txt
74 239 3316 /tmp/lb3.txt
74 239 3316 /tmp/lb4.txt
74 239 3316 /tmp/lb5.txt
74 239 3320 /tmp/lb6.txt
74 239 3316 /tmp/lb7.txt
74 239 3316 /tmp/lb8.txt
74 239 3316 /tmp/lb9.txt
740 2390 33176 total
{user@staging:~}$ diff /tmp/lb1.txt /tmp/lb10.txt
7c7
< var g_time_offset = new Date().getTime() - 1318965621000;
---
> var g_time_offset = new Date().getTime() - 1318965622000;
15c15
< <meta name="csrf-token" content="bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg="/>
---
> <meta name="csrf-token" content="GL/RRZCf2Zk/AQzRgEW2U4Iv3htD1hodt2qfp4jwIxQ="/>
23c23
< <form accept-charset="UTF-8" action="/authenticate" id="loginForm" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=" /></div>
---
> <form accept-charset="UTF-8" action="/authenticate" id="loginForm" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GL/RRZCf2Zk/AQzRgEW2U4Iv3htD1hodt2qfp4jwIxQ=" /></div>
{user@staging:~}$ diff /tmp/lb1.txt /tmp/lb2.txt
7c7
< var g_time_offset = new Date().getTime() - 1318965621000;
---
> var g_time_offset = new Date().getTime() - 1318965622000;
9,10c9,10
< <link href="/stylesheets/application.css?1318747862" media="screen" rel="stylesheet" type="text/css" />
< <script src="/javascripts/cache/application.js?1318747811" type="text/javascript"></script>
---
> <link href="/stylesheets/application.css?1318747582" media="screen" rel="stylesheet" type="text/css" />
> <script src="/javascripts/cache/application.js?1318747448" type="text/javascript"></script>
15c15
< <meta name="csrf-token" content="bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg="/>
---
> <meta name="csrf-token" content="BMZKKUZ3WFhQrCIewQ81VuArEtUp8gc6ccr0Wi3/sqE="/>
23c23
< <form accept-charset="UTF-8" action="/authenticate" id="loginForm" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=" /></div>
---
> <form accept-charset="UTF-8" action="/authenticate" id="loginForm" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="BMZKKUZ3WFhQrCIewQ81VuArEtUp8gc6ccr0Wi3/sqE=" /></div>
{user@staging:~}$
Notez que nous voyons une chaîne de "contenu" qui a une belle chaîne de caractères laid. Notez que le caractère '/' est dans la ligne "formulaire", mais dans la ligne "méta", il est remplacé par "/". Cela explique la différence de 4 ou 8 caractères entre mes longueurs de demande.
Il est irritant que Apachebench ne soit pas intelligent pour expliquer cela, mais au moins, nous pouvons voir la cause.