performance - benchmark - ¿Alguien puede explicar qué significan estos resultados de ApacheBench?
apache benchmark install mac (2)
¿Cuál es la razón para agregar más concurrente? Al igual que en, si tengo 1000 hits en 1 concurrente, ¿cómo difiere eso de 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 en las que 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.
- es lo mismo para el acceso a la base de datos: si una página está escribiendo en una base de datos, hay algún tipo de mecanismo de bloqueo (ya sea basado en tablas, basado en filas, o lo que sea, 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 del todo realista, te espero.
Debe pensar en cuántos usuarios estarán en el sitio al mismo tiempo, cuando esté en producción, y ajustar la concurrencia; solo recuerde que 5 usuarios al mismo tiempo en su sitio no significa que tenga que probar con una concurrencia de 5 con ab:
- Los usuarios reales esperarán un par de segundos entre cada solicitud (tiempo para leer la página, hacer clic en un enlace, ...)
- ab no espera nada: cada vez que se carga una página (es decir, se completa una solicitud), ¡se inicia otra solicitud!
Además, otras dos cosas:
- ab solo pruebas para una página: los usuarios reales navegarán en todo el sitio web, lo que podría causar problemas de concurrencia que no tendría al probar solo una 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 sea realmente costosa, cuando su sitio esté en producción.
Como una nota al margen: es posible que desee ver otras herramientas, que pueden realizar pruebas mucho más completas, como siege , Jmeter o OpenSTA : ab es realmente agradable cuando quiere medir si algo que hizo fue optimizar su página o no. ; pero si desea simular el uso "real" de su sitio, estos están mucho más adaptados.
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 .NET).
No he cambiado nada. Añadir nuevo proyecto. Configura el ajuste a LIBERACIÓN. Ejecutar sin depurar. (por lo que está en modo LIVE). 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án los resultados:
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 de lo que debería estar mirando.
En primer lugar, después de la cantidad de solicitudes de un segundo. Entonces, si tenemos un requisito para manejar 300 reqs / seg, ¿esto dice que se maneja y el promedio de 421 req es un segundo?
En segundo lugar, ¿cuál es la razón para agregar más concurrente? Al igual que en, si tengo 1000 hits en 1 concurrente, ¿cómo difiere eso de 500 en 2 concurrentes? ¿Es para probar si hay algún código que bloquee otras solicitudes?
Por último, ¿hay algo importante que haya omitido de los resultados de los que debo tomar nota?
Gracias :)
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.371 ms. 421 de ellos, uno después del otro, toman 1 segundo.
Debería jugar un poco con la concurrencia, para medir con precisión la capacidad de su sitio. Hasta cierto grado de concurrencia, se esperaría que el rendimiento aumentara, ya que IIS maneja varias solicitudes en paralelo. Por ejemplo, si su servidor tiene múltiples CPUs / núcleos. Además, si una página se basa en una E / S externa (servicio de nivel medio o llamadas de base de datos), la CPU puede funcionar en una solicitud, mientras que otra espera que se complete la E / S. En un cierto punto, las solicitudes por segundo se nivelarán, con una concurrencia creciente, y verá un aumento de la latencia. Aumente la concurrencia aún más y verá disminuir su rendimiento (req / s), ya que el servidor tiene que dedicar más recursos para hacer malabarismos con todas estas solicitudes concurrentes.
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 llamadas de base de datos o de nivel medio, y su sistema probablemente se encuentre al máximo en la CPU cuando la prueba se está ejecutando (o algo está mal y está fallando muy rápido). ¿está seguro de que ab obtiene la página de respuesta a la que desea enviarla? Lo que trae a colación otro punto: el ab mismo también consume cpu, especialmente una vez que subes la concurrencia. Así que quieres ejecutar ab en otra máquina.
Además, si su sitio realiza llamadas externas a servicios de nivel medio o bases de datos, debe ajustar su machine.config para optimizar la cantidad de subprocesos que IIS asigna: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268
Y solo un poco de curiosidad: el tiempo que se toma en las estadísticas se realiza en incrementos de ~ 16 ms, ya que parece ser la granularidad del temporizador utilizado. Es decir, el 80% de sus respuestas no tomaron 0 ms, tomaron algún tiempo <16 ms.