Apache Benchmark + GNUPlot: Medir y graficar el rendimiento de tu servidor web

Da igual si se usa Nginx, Apache, Lighttpd u otro, cualquier administrador de red que tenga un servidor web desearรก en algรบn punto saber quรฉ tan rรกpido responde el servidor web a un nรบmero determinado de consultas.

Managed-Services-Server-Management-e1368625038693

Apache Benchmark + GNUPlot

En esta ocasiรณn usaremos una herramienta llamada Apache Benchmark, que aunque tiene โ€˜apacheโ€™ en su nombre, NO sirve solo para medir el rendimiento de Apache, sino tambiรฉn se puede usar para Nginx y otros. En realidad, yo lo usarรฉ para medir el rendimiento de Nginx.

Usaremos ademรกs GNUPlot, que nos servirรก para hacer grรกficas como estas con unas pocas lรญneas:

results

Instalando Apache Benchmark y GNUPlot

Apache Benchmark es una herramienta que podremos usar despuรฉs de instalar el paquete de Apache, GNUPlot estarรก disponible luego de instalar el paquete de igual nombre. Por lo que entoncesโ€ฆ

En distros como Debian, Ubuntu o similares:

sudo apt-get install apache2 gnuplot

En distros como ArchLinux o derivadas:

sudo pacman -S apache gnuplot

Solo necesitamos instalar el paquete de Apache, no necesitamos iniciarlo ni configurar algo mรกs, con instalarlo bastarรก.

Usando Apache Benchmark

Lo que haremos serรก enviar un nรบmero determinado de peticiones (100) en grupos de varias (de 20 en 20) a un sitio determinado. El resultado lo guardaremos en un archivo .csv (resultado.csv) para luego procesarlo con GNUPloit, la lรญnea serรญa:

ab -g resultados.csv -n 100 -c 20 http://nuestro-sitio-web.com/

Es muy importante poner el / final en la URL del sitio a medir.

Este es el output o log que me muestra cuando hago la prueba a un sitio en mi red:

This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking gutl.jovenclub.cu (be patient).....done

Server Software:ย ย ย ย ย ย ย  nginx
Server Hostname:ย ย ย ย ย ย ย  gutl.jovenclub.cu
Server Port:ย ย ย ย ย ย ย ย ย ย ย  80

Document Path:ย ย ย ย ย ย ย ย ย  /
Document Length:ย ย ย ย ย ย ย  206 bytes

Concurrency Level:ย ย ย ย ย  20
Time taken for tests:ย ย  0.101 seconds
Complete requests:ย ย ย ย ย  100
Failed requests:ย ย ย ย ย ย ย  27
(Connect: 0, Receive: 0, Length: 27, Exceptions: 0)
Non-2xx responses:ย ย ย ย ย  73
Total transferred:ย ย ย ย ย  1310933 bytes
HTML transferred:ย ย ย ย ย ย  1288952 bytes
Requests per second:ย ย ย  993.24 [#/sec] (mean)
Time per request:ย ย ย ย ย ย  20.136 [ms] (mean)
Time per request:ย ย ย ย ย ย  1.007 [ms] (mean, across all concurrent requests)
Transfer rate:ย ย ย ย ย ย ย ย ย  12715.49 [Kbytes/sec] received

Connection Times (ms)
minย  mean[+/-sd] medianย ย  max
Connect:ย ย ย ย ย ย ย  0ย ย ย  1ย ย  0.2ย ย ย ย ย  1ย ย ย ย ย ย  1
Processing:ย ย ย ย  1ย ย  17ย  24.8ย ย ย ย ย  4ย ย ย ย ย  86
Waiting:ย ย ย ย ย ย ย  1ย ย  15ย  21.5ย ย ย ย ย  4ย ย ย ย ย  76
Total:ย ย ย ย ย ย ย ย ย  1ย ย  18ย  24.8ย ย ย ย ย  5ย ย ย ย ย  87

Percentage of the requests served within a certain time (ms)
50%ย ย ย ย ย  5
66%ย ย ย ย ย  6
75%ย ย ย ย  22
80%ย ย ย ย  41
90%ย ย ย ย  62
95%ย ย ย ย  80
98%ย ย ย ย  87
99%ย ย ย ย  87
100%ย ย ย ย  87 (longest request)

Les he marcado en rojo lo que considero yo, es lo mรกs importante, que viene siendo mรกs o menos:

  1. Datos del servidor que estamos probando, asรญ como la URL en cuestiรณn.
  2. Cantidad de peticiones por segundo.
  3. Cuantos milisegundos demorรณ el servidor en atender la peticiรณn que mรกs demorรณ, o sea, la que mรกs tardรณ en ser atendida.

Con esta informaciรณn pueden tener una idea de cuรกnto demorarรก el servidor en atender esa cantidad de solicitudes, pueden luego agregar un mejor sistema de cachรฉ, desactivar mรณdulos que no usen, etc etc, volver a ejecutar la prueba y ver si el rendimiento mejorรณ o no.

Les recomiendo correr la prueba 2 o 3 veces, para que creen algo asรญ como un margen, pues rara vez los resultados de dos pruebas seguidas son idรฉnticos.

Otras opciones o parรกmetros รบtiles de Apache Benchmark:

-k -H โ€˜Accept-Encoding: gzip,deflateโ€™ : Con esto ab aceptarรก el cachรฉ y compresiรณn que el servidor tenga configurado, por lo que los tiempos serรกn inferiores.

-f urls.txt : Entonces en vez de solo probar el index del sitio, irรก efectuando pruebas en las URLs que especifiquemos en ese archivo.

En finโ€ฆ รฉchenle un ojo a man ab para que vean.

Mostrar en un grรกfico el resultado:

Para poner en una imagen este output, o sea, en un medio mรกs visual y que muchas veces, es todo lo que los directivos logran entender โ€ฆ para ello usaremos como ya dije antes, GNUPlot

En la misma carpeta donde tenemos el archivo resultados.csv (que recuerdan, acabamos de generar con el comando anterior) vamos a crear un archivo llamado gnuplot.p:

nano plot.p

En รฉl pondremos lo siguiente:

set terminal png size 600
set output "resultados.png"
set title "100 peticiones, 20 peticiones concurrentes"
set size ratio 0.6
set grid y
set xlabel "peticiones"
set ylabel "tiempo de respuesta (ms)"
plot "resultados.csv" using 9 smooth sbezier with lines title "gutl.jovenclub.cu"

Les he seรฑalado en rojo lo que deberรญan revisar siempre. O sea y de arriba hacia abajo:

  1. Nombre del archivo de imagen que se generarรก
  2. Cantidad de peticiones totales y concurrentes.
  3. Nombre del archivo que reciรฉn acabamos de generar.
  4. Dominio sobre el que trabajamos.

Una vez ponemos eso, guardamos y salimos (Ctrl + O y luego Ctrl + X), ejecutaremos lo siguiente:

gnuplot plot.p

Y listo, eso nos generarรก el grรกfico con el nombre deseado, el mรญo es:

results2

Fin!

Apache Benchmark tiene un montรณn mรกs de opciones, son muchas combinaciones tambiรฉn que podemos usar para que nuestra prueba de rendimiento sea aรบn mรกs completa.

Pero bueno, esto ha sido lo bรกsico ๏˜‰

Enjoy!


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      Francisco dijo

    Interesante apache benchmark, lo de gnuplot no lo conocรญa es posible modificar el estilo de la salida?? digo como para un reporte formal.

    Saludos desde Chile.

         KZKG^Gaara dijo

      Sรญ, hay un montรณn de configuraciones en la red para gnuplot, busca por Google a ver si encuentras alguna lo suficientemente seria o profesional para que la uses, pues ya eso es gusto de cada cual ๐Ÿ™‚

      Wolf119 dijo

    Ummm lo voy a probar ahora mismo en un server apache virtual que tengo corriendo para ver como va esto, con respecto a GUTL, como que se dispara de una forma muy rapida a partir de las 80 peticiones no?, a ver que 100 ms no son nada, pero me llama la atencion el subidon que da por 10 peteciones mas comparado con 70 a 80 con 80 a 90

         KZKG^Gaara dijo

      Debe ser por la cola o cantidad de hilos mรกximos a atender de forma simultรกnea. No obstante, la prueba la hice sin gzip, sin deflate, sin cachรฉ ni nada ๐Ÿ˜‰

      Charlie-Brown dijo

    Muy interesante, sobre todo por el uso de GNUPlot. Por lo que veo puede ser usado para generar grรกficos a partir de casi cualquier conjunto de datos ยฟo no?…

         KZKG^Gaara dijo

      Sรญ claro, le pasas los datos en un archivo separado por comas o algo asรญ, le indicas cรณmo procesarlos en el archivo de configuraciรณn, y listo

      Adolfo dijo

    Hola, siempre me la paso leyendo este blog pero nunca he comentado ningun articulo, y esta me parece una buena oportunidad.
    Lo que quiero compartirles es que este tipo de grafico puede malinterpretarse, debido a que Apache Bench ordena el resultado usando ttime (total time) en vez del tiempo secuencial. Aunque los datos siguen siendo verdaderos, probablemente el grafico no muestre lo que queremos.
    Aqui les dejo el link donde lo lei.
    http://www.bradlanders.com/2013/04/15/apache-bench-and-gnuplot-youre-probably-doing-it-wrong/

    Saludos.

      Hugo dijo

    Apache Benchmark no es la mejor herramienta para medir el rendimiento de servidores HTTP en equipos con multiples nรบcleos, ademรกs, solo 100 peticiones con 20 conexiones concurrentes es una prueba muy dรฉbil, algo mรกs realista serรญan 1,000 o 10,000 peticiones con 100 conexiones concurrentes (es sabido que Nginx es una de las aplicaciones capaces de servir mรกs de 10,000 peticiones por segundo) y para esto es mejor usar una herramienta como weighttp, que esta concebida para equipos con multiples nรบcleos y usa epoll que es mรกs rรกpido, a diferencia de Apache Bench que usa un solo hilo y un mecanismo de gestiรณn de eventos menos eficiente.

    Para aterrizar mi punto, suponiendo que el servidor tenga solo 4 nรบcleos:

    weighttp -n 10000 -c 100 -t 4 -k ยซhttp://nuestro-sitio-web.com/ยป

      fede dijo

    Hola a todos,
    al trazar el grafico (a partir del CSV) con gnuplot me da el sgte error, ยฟme podeis decir como solucionarlo?

    ยซplot.pยป, line 8: warning: Skipping data file with no valid points

    plot ยซgrafica.csvยป using 9 smooth sbezier with lines title ยซAB – localhost/webยป
    ^
    ยซplot.pยป, line 8: x range is invalid

    Con gnuplot, ยฟtmbien puedo generar paginas HTML?