prueba de carga ab


194

¿Alguien puede guiarme a través del proceso de cómo puedo cargar la prueba de mi sitio web usando la herramienta Apache bench ( ab)?

Quiero saber lo siguiente:

¿Cuántas personas por minuto puede manejar el sitio?

Por favor, llévame a través de los comandos que debo ejecutar para resolver esto.

Intenté cada tutorial, y son confusos.

Respuestas:


314

La herramienta de referencia de Apache es muy básica y, si bien le dará una idea sólida de cierto rendimiento, es una mala idea depender solo de ella si planea exponer su sitio a un estrés grave en la producción.

Dicho esto, aquí están los parámetros más comunes y más simples:

-c: ("Concurrencia"). Indica cuántos clientes (personas / usuarios) estarán visitando el sitio al mismo tiempo. Mientras se abejecuta, habrá -cclientes visitando el sitio. Esto es lo que realmente decide la cantidad de estrés que sufrirá su sitio durante el punto de referencia.

-n: Indica cuántas solicitudes se realizarán. Esto simplemente decide la duración del punto de referencia. Un buen -nvalor con un -cvalor que su servidor pueda soportar es una buena idea para asegurarse de que las cosas no se rompan bajo un estrés sostenido: no es lo mismo soportar el estrés durante 5 segundos que durante 5 horas.

-k: Esto hace la funcionalidad de los navegadores "KeepAlive" por naturaleza. No necesita pasar un valor -kya que es "booleano" (lo que significa que indica que desea que su prueba use el encabezado Keep Alive de HTTP y mantenga la conexión). Dado que los navegadores hacen esto y es probable que desee simular el estrés y el flujo que su sitio tendrá de los navegadores, se recomienda que haga un punto de referencia con esto.

El argumento final es simplemente el anfitrión. Por defecto, golpeará el protocolo http: // si no lo especifica.

ab -k -c 350 -n 20000 example.com/

Al emitir el comando anterior, accederá a http://example.com/ con 350 conexiones simultáneas hasta que se cumplan 20 mil solicitudes. Se realizará utilizando el encabezado keep alive.

Después de que el proceso finalice las 20 mil solicitudes, recibirá comentarios sobre las estadísticas. Esto le dirá qué tan bien se desempeñó el sitio bajo el estrés que lo puso al usar los parámetros anteriores.

Para averiguar cuántas personas puede manejar el sitio al mismo tiempo, solo vea si los tiempos de respuesta (medios, tiempos de respuesta mínimos y máximos, solicitudes fallidas, etc.) son números que su sitio puede aceptar (diferentes sitios pueden desear velocidades diferentes). Puede ejecutar la herramienta con diferentes valores -c hasta que llegue al lugar donde dice "Si lo aumento, comienza a recibir solicitudes fallidas y se rompe".

Dependiendo de su sitio web, esperará un número promedio de solicitudes por minuto. Esto varía tanto que no podrá simular esto con ab. Sin embargo, piénselo de esta manera: si su usuario promedio recibirá 5 solicitudes por minuto y el tiempo de respuesta promedio que encuentra válido es de 2 segundos, eso significa que 10 segundos de un minuto 1 usuario estará en solicitudes, lo que significa solo 1/6 de las veces llegará al sitio. Esto también significa que si tiene 6 usuarios que acceden al sitio con ab simultáneamente, es probable que tenga 36 usuarios en la simulación, a pesar de que su nivel de concurrencia (-c) es solo 6.

Esto depende del comportamiento que espera de sus usuarios que usan el sitio, pero puede obtenerlo de "Espero que mi usuario llegue a X solicitudes por minuto y considero un tiempo de respuesta promedio válido si es de 2 segundos". Luego, simplemente modifique su nivel -c hasta alcanzar los 2 segundos de tiempo de respuesta promedio (pero asegúrese de que el tiempo de respuesta máximo y stddev sigan siendo válidos) y vea qué tan grande puede hacer -c.

Espero haber explicado esto claro :) Buena suerte


55
¡Respuesta directa y clara! ¿Podría explicar un poco más por qué obtuvo esto? "Esto también significa que si tiene 6 usuarios que acceden al sitio con ab simultáneamente, es probable que tenga 36 usuarios en la simulación, a pesar de que su nivel de concurrencia (-c) es solo 6. "
kbariotis

3
Solo un recordatorio, probablemente desee agregar la -lopción si la página tiene contenido dinámico, de esa manera no obtendrá un montón de solicitudes fallidas debido a que la longitud del contenido es diferente entre las solicitudes.
JCM

73

Por favor, llévame a través de los comandos que debo ejecutar para resolver esto.

La prueba más simple que puede hacer es realizar 1000 solicitudes, 10 a la vez (que simula aproximadamente 10 usuarios concurrentes que obtienen 100 páginas cada uno, a lo largo de la prueba).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 es la cantidad de solicitudes a realizar.

-c 10 le dice a AB que haga 10 solicitudes a la vez, en lugar de 1 solicitud a la vez, para simular mejor los visitantes concurrentes (frente a los visitantes secuenciales).

-kenvía el KeepAliveencabezado, que le pide al servidor web que no apague la conexión después de realizar cada solicitud, sino que en cambio la reutilice.

También envío el encabezado adicional Accept-Encoding: gzip, deflateporque mod_deflate casi siempre se usa para comprimir la salida de texto / html 25% -75%, cuyos efectos no deben descartarse debido a su impacto en el rendimiento general del servidor web (es decir, puede transferir 2 veces los datos en la misma cantidad de tiempo, etc.

Resultados:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Para la interpretación más simple, ignore todo PERO esta línea:

Requests per second:    704.23 [#/sec] (mean)

Multiplique eso por 60 y tendrá sus solicitudes por minuto.

Para obtener resultados del mundo real, querrá probar Wordpress en lugar de algún archivo HTML estático o index.php porque necesita saber cómo funciona todo junto: incluyendo código PHP complejo y múltiples consultas MySQL ...

Por ejemplo, aquí están los resultados de probar una nueva instalación de Wordpress en el mismo sistema y entorno WAMP (estoy usando WampDeveloper, pero también hay Xampp, WampServer y otros) ...

Requests per second:    18.68 [#/sec] (mean)

¡Eso es 37 veces más lento ahora!

Después de la prueba de carga, hay varias cosas que puede hacer para mejorar el rendimiento general (Solicitudes por segundo) y también hacer que el servidor web sea más estable bajo una carga mayor (por ejemplo, aumentar -ny -ctiende a fallar Apache), que puedes leer aquí:

Prueba de carga Apache con AB (Apache Bench)


9

Pasos para configurar Apache Bench (AB) en Windows (IMO - Recomendado).

Paso 1 - Instala Xampp.
Paso 2: abre CMD.
Paso 3: vaya al destino de banco apache ( cd C:\xampp\apache\bin) desde CMD
Paso 4: pegue el comando ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Paso 5: espere. Terminaste


No funciona ... Recibo este error: Benchmarking localhost (sea paciente) ... apr_socket_recv: Conexión rechazada (111)
Vijaysinh Parmar

reemplazar localhost por 127.0.0.1
akshaynagpal

3

También tenía curiosidad por saber si puedo medir la velocidad de mi script con apache abs o un script de medida de construcción / destrucción de php o una extensión de php.

los dos últimos me han fallado: son aproximados. después de lo cual pensé en probar "ab" y "abs".

¡el comando "ab -k -c 350 -n 20000 example.com/" es hermoso porque todo es más fácil!

pero ¿alguien pensó en "localhost" en algún servidor apache, por ejemplo www.apachefriends.org?

debes crear una carpeta como "bench" en la raíz donde tienes 2 archivos: prueba "bench.php" y referencia "void.php".

y luego: ¡referencia!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

en su escritorio, debe usar un archivo .bat (en Windows) como este:

bench.bat

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Ahora, si prestas mucha atención ...

¡El script vacío no produce cero resultados! Así que la conclusión es: ¡a partir del segundo resultado, el primer resultado debe reducirse!

aquí tengo:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 el resultado que espero!


2

La prueba de carga de su API utilizando solo ab no es suficiente. Sin embargo, creo que es una gran herramienta para darle una idea básica de cómo funciona su sitio.

Si desea utilizar el comando ab para probar varios puntos finales de API, con datos diferentes, todos al mismo tiempo en segundo plano, debe usar el comando "nohup". Ejecuta cualquier comando incluso cuando cierra la terminal.

Escribí un script simple que automatiza todo el proceso, siéntase libre de usarlo: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.