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.
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:
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:
Les he marcado en rojo lo que considero yo, es lo mรกs importante, que viene siendo mรกs o menos:
Datos del servidor que estamos probando, asรญ como la URL en cuestiรณn.
Cantidad de peticiones por segundo.
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:
Nombre del archivo de imagen que se generarรก
Cantidad de peticiones totales y concurrentes.
Nombre del archivo que reciรฉn acabamos de generar.
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:
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.
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 ๐
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
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 ๐
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?…
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/
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:
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.
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 ๐
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
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 ๐
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?…
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
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.
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/ยป
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?