2009-10-02 5 views
21

Tengo un sitio web en PHP, Lighttpd. Utiliza también MySQL en Centos 5. He probado mi PHP con el siguiente código con Apache Bench (ab). Resultó en algunos errores (solicitudes fallidas) que indican otra longitud que la normal. Estoy absolutamente seguro de que mi resultado PHP siempre debe tener la misma longitud exacta. Revisé mis registros de errores y log de Lighttpd y MySQL y no tengo ningún error allí.Solicitudes fallidas por longitud en mi resultado de la prueba de carga ApacheBench

¿Hay alguna manera de verificar exactamente qué obtiene ab cuando el resultado tiene otra longitud o hay alguna otra forma de averiguar cuál es la causa o cuál es el resultado "malo"?

Necesito saber eso porque necesito tener 100% buenos resultados.

-bash-3.2# ab -n 500 -c 200 http://domain.com/test/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 domain.com (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Finished 500 requests 


Server Software:  lighttpd/1.4.20 
Server Hostname:  domain.com 
Server Port:   80 

Document Path:   /test/index.php 
Document Length:  15673 bytes 

Concurrency Level:  200 
Time taken for tests: 0.375862 seconds 
Complete requests:  500 
Failed requests:  499 
    (Connect: 0, Length: 499, Exceptions: 0) 
Write errors:   0 
Total transferred:  7920671 bytes 
HTML transferred:  7837000 bytes 
Requests per second: 1330.28 [#/sec] (mean) 
Time per request:  150.345 [ms] (mean) 
Time per request:  0.752 [ms] (mean, across all concurrent requests) 
Transfer rate:   20579.36 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 10 9.4  6  30 
Processing:  0 113 133.5  16  342 
Waiting:  0 111 134.3  12  341 
Total:   0 123 138.9  16  370 

Percentage of the requests served within a certain time (ms) 
    50%  16 
    66% 235 
    75% 289 
    80% 298 
    90% 331 
    95% 345 
    98% 365 
    99% 368 
100% 370 (longest request) 

Respuesta

17

Ejecute ab con el parámetro -v 2, lo que significa nivel 2 de verbosidad. Esto volcará los encabezados de respuesta. Si sus solicitudes no utilizan codificación fragmentada, verá un encabezado "Content-Length" que indica el tamaño de cada respuesta.

gw:~$ ab -n 1 -v 2 "http://whatever.com/" 

... 

LOG: header received: 
HTTP/1.0 200 OK 
... 
Content-Length: 1568399 

Si sus respuestas utilizan la codificación fragmentada, entonces la longitud no se conoce hasta que termine la transferencia. Por lo general, la codificación fragmentada solo se utiliza para las respuestas comprimidas, y ApacheBench no hace la compresión de forma predeterminada.

Si es es comprimiendo las respuestas por cualquier razón que pueda explicarlo; la longitud comprimida depende del contenido.

También puede usar curl -i y la opción --compress para ver los encabezados de respuesta en una sola solicitud con y sin compresión.

+27

** Comentario de un usuario anónimo (edición rechazada): ** Nota: 'ab' espera que todas las respuestas tengan el mismo tamaño. Si existe alguna posibilidad de que su salida varíe en tamaño, debe ignorar "Solicitudes fallidas", ya que 'ab' las considerará fallidas. – Anne

3

Uso de tcpdump

Abrir ventanas Cant 2 Terminal/corteza o simplemente utilizar la pantalla.

En la primera ventana, el uso de tcpdump para capturar los datos de transmisión desde/a la tarjeta de red (eth0) a un archivo:

sudo tcpdump -s 9999 -i eth0 -w myfile.txt 

En la segunda ventana, disparar su comando ab:

ab -n 500 -c 200 http://domain.com/test/index.php 
Cuando

que todo esté hecho, analizar el archivo con cuerdas y grep:

strings myfile2.txt | grep -C 3 "200 OK" 

Usted debe ser capaz de monito r todos los segmentos de datos observando o grep'ing los resultados.

+0

recibo el mensaje 'tcpdump: ioctl: No existe el dispositivo' mensaje al intentar sudo tcpdump –

+0

Hice lo que escribía y esto son los resultados: - HTTP /1.0 200 OK Conexión: cerrar X-Powered-By: PHP/5.2.6 Tipo de contenido: texto/html ¿Cómo debo interpretar este resultado? –

+0

Tomaszs: tendrá que cambiar el identificador del dispositivo NIC por el SO * nix que esté ejecutando. en0 en Mac, eth0 en Linux, etc. HTTP/1.0 200 OK significa que el servidor web encontró el recurso solicitado y el contenido devuelto. ¡La página tuvo éxito! Simplemente tendrá que leer el contenido de myfile2.txt para ver dónde están llegando las fallas a la imagen. –

1

ab supone que todas las respuestas son las mismas. Mira la longitud del contenido de la primera respuesta, y luego compara a los demás con eso.

Desde la página del manual:

Document Length 
    This is the size in bytes of the first successfully returned document. 
    If the document length changes during testing, the response is 
    considered an error. 

Así que si su primera solicitud contiene los siguientes datos:

{"hostname":"nodecellar-1-dwfxd","serverip":"10.1.3.3"} 

Y el siguiente es:

{"hostname":"nodecellar-1-dwfxd","serverip":"10.1.3.30"} 

ab fallará con una Error de longitud, ya que la salida tiene un carácter más largo.

Cuestiones relacionadas