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:
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:
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.
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:
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, por ejemplo -C para usar una cookie, -f para que en vez de probar solo el index del sitio, pruebe varias URLs que tengamos en un archivo de texto plano, 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!

Continúar leyendo...

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:
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:
- 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.
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:

Apache Benchmark tiene un montón más de opciones, por ejemplo -C para usar una cookie, -f para que en vez de probar solo el index del sitio, pruebe varias URLs que tengamos en un archivo de texto plano, 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!
Continúar leyendo...