testing - test - apachebench windows
investigando la solicitud fallida de referencia de apache (3)
Este es un problema con las páginas dinámicas, porque la longitud del contenido puede variar entre las solicitudes. Al usar ab con esas páginas, necesita usar la opción -l
.
-l Accept variable document length (use this for dynamic pages)
Solo empiezo a usar AB hoy. Leí un par de tutoriales AB sobre lo nuevo y pensé en probarlo para probar mi sitio.
Después de usarlo un par de veces recibí un gran número de solicitudes fallidas. ¿Puedes explicar qué significa una solicitud fallida? ¿Cómo puedo investigar más sobre este tema?
Resultado de la muestra 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)
NB Estoy usando el servidor compartido Hostgator Linux.
Las solicitudes fallidas se basan en la longitud, es decir, el número de respuestas que no coinciden exactamente con el recuento de bytes indicado. Esto se debe a contenido dinámico, como anuncios, etc., que se publican de forma diferente cada vez, por lo que no hay nada de qué preocuparse.
Martin está en lo cierto. Más útilmente, corrí un rizo rápido contra nuestros servidores de producción:
{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:~}$
Tenga en cuenta que estamos viendo una cadena de "contenido" que tiene una bonita cadena fea de caracteres. Observe que el carácter ''/'' está en la línea de ''formulario'', pero en la línea ''meta'', se reemplaza por ''/''. Esto explica la diferencia de 4 u 8 caracteres entre mis longitudes de solicitud.
Es irritante que apachebench no sea capaz de dar cuenta de esto, pero al menos podemos ver la causa.