2009-09-13 30 views
16

Estoy tratando de averiguar cómo usar ApacheBench y comparar mi sitio web. Instalé el proyecto de sitio predeterminado (es ASP.NET MVC, pero no deje de leer si no es una persona de .NET).¿Puede alguien explicar por qué significan estos resultados de ApacheBench?

No cambié nada. Agregar nuevo proyecto. Establezca la confuración en LIBERACIÓN. Ejecutar sin depurar (por lo tanto, está en modo EN VIVO). Sí, esto es con el servidor web incorporado, no con el grado de producción IIS o Apache o lo que sea.

Así que aquí está el resultado: -

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> 

Ahora, no estoy seguro exactamente lo que debe mirar.

Primero, después del número de solicitudes por segundo. Entonces, si tenemos un requerimiento para manejar 300 reqs/seg, ¿significa esto que maneja un promedio de 421 req por segundo?

En segundo lugar, ¿cuál es el motivo para agregar más concurrentes? Como en, si tengo 1000 visitas simultáneas en 1, ¿cómo difiere eso de 500 en 2 concurrentes? ¿Es para probar si hay algún código que bloquea otras solicitudes?

Por último, ¿hay algo importante que me haya perdido de los resultados que debo tener en cuenta?

Gracias :)

Respuesta

16

¿cuál es la razón para la adición de más concurrente? Como en, si tengo 1000 hits en 1 concurrente, ¿cómo difiere eso a 500 en 2 concurrentes? ¿Es para probar si hay algún código que bloquee otras solicitudes ?

Es un poco sobre eso, sí: su aplicación probablemente esté haciendo cosas donde la concurrencia puede traer problemas.

Un par de ejemplos:

  • una página está intentando acceder a un archivo - bloqueándolo en el proceso; significa que si otra página tiene que acceder al mismo archivo, tendrá que esperar hasta que la primera página haya terminado de trabajar con él.
  • exactamente lo mismo para el acceso a la base de datos: si una página está escribiendo a una base de datos, hay algún tipo de bloqueo mecanisms (ya sea basado en tablas, o basada en filas, o lo que, dependiendo de su DBMS)

La prueba con una concurrencia de uno está bien ... Siempre y cuando su sitio web nunca tenga más de un usuario al mismo tiempo; lo cual no es realista, espero por ti.


Tiene que pensar en cuántos usuarios estarán en el sitio al mismo tiempo, cuando está en producción, y ajustar la concurrencia; sólo recuerda que 5 usuarios al mismo tiempo en su sitio no significa que tenga que probar con una concurrencia de 5 con AB:

  • usuarios reales van a esperar un par de segundos entre cada solicitud (tiempo de leer el página, haga clic en un enlace, ...)
  • ab no espera en absoluto: cada vez que se carga una página (es decir, se completa una solicitud), se inicia otra solicitud!


Además, otras dos cosas:

  • ab únicas pruebas de una página - usuarios reales van a navegar por todo el sitio, lo que podría causar problemas de concurrencia no tendrían mientras se prueba una sola página
  • ab solo carga una página: no solicita recursos externos (piense en CSS, imágenes, JS, ...); lo que significa que tendrá muchas otras solicitudes, aunque no sean realmente costosas, cuando su sitio esté en producción.

Como nota al margen: es posible que desee echar un vistazo a otras herramientas, que pueden hacer pruebas mucho más completos, como siege, Jmeter, o OpenSTA: ab es muy agradable cuando se desea medir si algo lo hizo está optimizando su página o no; pero si quiere simular el uso "real" de su sitio, estos están mucho más adaptados.

8

Sí, si desea saber cuántas solicitudes por segundo puede atender su sitio, consulte la línea "Solicitudes por segundo". En su caso, es bastante simple ya que ejecutó ab con una concurrencia de 1. Cada solicitud, en promedio, tomó solo 2.371ms. 421 de ellos, uno después del otro, toman 1 segundo.

Realmente debería jugar con la concurrencia un poco, para medir con precisión la capacidad de su sitio. Hasta cierto grado de concurrencia esperaría que el rendimiento aumentara, ya que IIS maneja varias solicitudes en paralelo. P. ej. si su servidor tiene múltiples CPU/núcleos. Además, si una página se basa en IO externo (servicio de nivel medio o llamadas de base de datos), la CPU puede trabajar en una solicitud, mientras que otra espera que IO lo complete. En cierto punto, las solicitudes/seg se nivelarán, con una concurrencia cada vez mayor, y verá un aumento de la latencia. Incremente la concurrencia aún más y verá disminuir su rendimiento (req/s), ya que el servidor debe dedicar más recursos a manejar todas estas solicitudes simultáneas.

Dicho todo esto, la mayoría de sus solicitudes regresan en aproximadamente 2 ms. Eso es bastante rápido, así que supongo que no hay mucho que hacer en términos de DB o llamadas de nivel medio, y su sistema probablemente esté al máximo en la CPU cuando la prueba se está ejecutando (o algo está mal, y falla muy rápido. ¿Seguro que ab obtiene la página de respuesta que desea? Es decir, ¿la página que cree que está probando es de 1204 bytes?). Lo que trae a colación otro punto: ab también consume CPU, especialmente una vez que sube la concurrencia. Entonces quieres ejecutar ab en otra máquina.

Además, debe su sitio hacer llamadas externas a los servicios de nivel medio o DBS, que desea ajustar su machine.config para optimizar el número de hilos IIS asigna: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

Y sólo un poco de trivia: el tiempo tomado las estadísticas se realizan en incrementos de ~ 16 ms, ya que parece ser la granularidad del temporizador utilizado. Es decir. 80% de tus respuestas no tomaron 0ms, tomaron algo de tiempo < 16ms.

+0

Cheers mate :) No tengo servicios de base de datos o de nivel medio. Es solo el proyecto estándar predeterminado de ASP.NET MVC. Solo estoy tratando de entender cómo funciona ApacheBench y cómo puedo usarlo para algunos beneficios reales, etc. :) –

Cuestiones relacionadas