Apache Bench: configuración del entorno

En este capítulo, lo guiaremos sobre cómo configurar su entorno para Apache Bench en su VPS.

Requisitos del sistema

  • Memory - 128 MB

  • Disk Space - Sin requisito mínimo

  • Operating System - Sin requisito mínimo

Instalación de Apache Bench

Apache Bench es una aplicación independiente y no depende de la instalación del servidor web Apache. El siguiente es un proceso de dos pasos para instalar Apache Bench.

Step 1 - Actualizar la base de datos del paquete.

# apt-get update

Tenga en cuenta que el símbolo # antes de un comando de terminal significa que el usuario root está emitiendo ese comando.

Step 2 - Instale el paquete de utils apache2 para obtener acceso a Apache Bench.

# apt-get install apache2-utils

Apache Bench ya está instalado. Si desea probar una aplicación web alojada en el mismo VPS, basta con instalar solo el servidor web Apache:

# apt-get install apache2

Al ser una utilidad de Apache, Apache Bench se instala automáticamente en la instalación del servidor web Apache.

Verificación de la instalación de Apache Bench

Veamos ahora cómo verificar la instalación de Apache Bench. El siguiente código ayudará a verificar la instalación:

# ab -V

Output

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

Cuando vea la salida del terminal anterior, significa que ha instalado Apache Bench con éxito.

Creación de un usuario de Sudo privilegiado

Desde el punto de vista de la seguridad, se considera una buena práctica para el administrador del sistema crear un usuario sudo en lugar de trabajar como root. Crearemos un usuario de prueba, llamado prueba, para el propósito:

# useradd -m -d /home/test -g sudo test

Establezcamos la contraseña para el nuevo usuario:

# passwd test

El sistema solicitará una nueva contraseña para la prueba de usuario. Puede ingresar una contraseña simple ya que solo estamos probando y no implementando en el servidor de producción. Por lo general, el comando sudo le pedirá que proporcione la contraseña de usuario de sudo; Se recomienda no utilizar contraseñas complicadas ya que el proceso se vuelve engorroso.

Output

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

Prueba del sitio web Apache.org

En esta sección, probaremos el sitio web Apache.org. Primero cambiemos a la prueba de usuario de sudo:

# su test

Para empezar, probaremos el sitio web de la organización Apache, https://www.apache.org/. Primero ejecutaremos el comando y luego entenderemos el resultado:

$ ab -n 100 -c 10 https://www.apache.org/

aquí -nes el número de solicitudes a realizar para la sesión de evaluación comparativa. El valor predeterminado es realizar una única solicitud que generalmente conduce a resultados de evaluación comparativa no representativos.

Y -ces la concurrencia e indica el número de solicitudes múltiples que se deben realizar a la vez. El valor predeterminado es una solicitud a la vez.

Entonces, en esta prueba, Apache Bench realizará 100 solicitudes con concurrencia 10 al servidor de la organización Apache.

Output

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

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

Después de ejecutar nuestra primera prueba, será fácil reconocer el patrón de uso de este comando, que es el siguiente:

# ab [options .....]  URL

dónde,

  • ab - Comando Apache Bench

  • options - banderas para una tarea particular que queremos realizar

  • URL - URL de ruta que queremos probar

Comprensión de los valores de salida

Necesitamos comprender las diferentes métricas para comprender los diversos valores de salida devueltos por ab. Aquí va la lista:

  • Server Software - Es el nombre del servidor web devuelto en el encabezado HTTP de la primera devolución exitosa.

  • Server Hostname - Es la dirección DNS o IP proporcionada en la línea de comando.

  • Server Port- Es el puerto al que ab se está conectando. Si no se proporciona ningún puerto en la línea de comando, este será 80 para http y 443 para https de forma predeterminada.

  • SSL/TLS Protocol- Este es el parámetro de protocolo negociado entre el cliente y el servidor. Esto solo se imprimirá si se utiliza SSL.

  • Document Path - Este es el URI de solicitud analizado desde la cadena de línea de comando.

  • Document Length- Es el tamaño en bytes del primer documento devuelto correctamente. Si la longitud del documento cambia durante la prueba, la respuesta se considera un error.

  • Concurrency Level - Este es el número de clientes concurrentes (equivalente a navegadores web) usados ​​durante la prueba.

  • Time Taken for Tests - Este es el tiempo transcurrido desde el momento en que se crea la primera conexión de socket hasta el momento en que se recibe la última respuesta.

  • Complete Requests - El número de respuestas exitosas recibidas.

  • Failed Requests- El número de solicitudes que se consideraron fallidas. Si el número es mayor que cero, se imprimirá otra línea que muestra el número de solicitudes que fallaron debido a la conexión, lectura, contenido incorrecto o excepciones.

  • Total Transferred- El número total de bytes recibidos del servidor. Este número es esencialmente el número de bytes enviados a través del cable.

  • HTML Transferred- El número total de bytes de documentos recibidos del servidor. Este número excluye los bytes recibidos en los encabezados HTTP.

  • Requests per second- Este es el número de solicitudes por segundo. Este valor es el resultado de dividir el número de solicitudes por el tiempo total empleado.

  • Time per request- El tiempo medio empleado por solicitud. El primer valor se calcula con la fórmula de concurrencia * timetaken * 1000 / done, mientras que el segundo valor se calcula con la fórmula timetaken * 1000 / done

  • Transfer rate - La tasa de transferencia calculada por la fórmula totalread / 1024 / timetaken.

Análisis rápido de la salida de prueba de carga

Habiendo aprendido acerca de los títulos de los valores de salida del comando ab, intentemos analizar y comprender los valores de salida para nuestra prueba inicial:

  • La organización de Apache está utilizando su propio software de servidor web: Apache (versión 2.4.7)

  • El servidor está escuchando en el puerto 443 debido a https. Si hubiera sido http, habría sido 80 (predeterminado).

  • El total de datos transferidos es de 58769 bytes para 100 solicitudes.

  • Prueba completada en 1.004 segundos. No hay solicitudes fallidas.

  • Solicitudes por segundo: 99,56. Este se considera un número bastante bueno.

  • Tiempo por solicitud: 100,444 ms (para 10 solicitudes simultáneas). Entonces, en todas las solicitudes, es 100.444 ms / 10 = 10.044 ms.

  • Tasa de transferencia: 1338,39 [Kbytes / seg] recibidos.

  • En las estadísticas de tiempo de conexión, se puede observar que muchas solicitudes tuvieron que esperar unos segundos. Esto puede deberse a que el servidor web apache pone las solicitudes en cola de espera.

En nuestra primera prueba, probamos una aplicación (es decir, www.apache.org) alojada en un servidor diferente. En la parte posterior del tutorial, probaremos nuestras aplicaciones web de muestra alojadas en el mismo servidor desde el que ejecutaremos las pruebas ab. Esto es para facilitar el aprendizaje y la demostración. Idealmente, el nodo principal y el nodo de prueba deben ser diferentes para una medición precisa.

Para aprender mejor ab, debe comparar y observar cómo varían los valores de salida para diferentes casos a medida que avanzamos en este tutorial.

Trazar la salida de Apache Bench

Aquí trazaremos el resultado relevante para ver cuánto tiempo tarda el servidor a medida que aumenta el número de solicitudes. Para eso, agregaremos el-g opción en el comando anterior seguido del nombre del archivo (aquí out.data) en el que se guardarán los datos de salida ab -

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

Veamos ahora el out.data antes de crear una trama -

$ less out.data

Output

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...

Entendamos ahora los encabezados de columna en el out.data archivo -

  • starttime - Esta es la fecha y hora en que comenzó la llamada.

  • seconds - Igual que la hora de inicio pero en el formato de marca de tiempo de Unix (fecha -d @ 1496160697 devuelve la salida de la hora de inicio).

  • ctime - Este es el tiempo de conexión.

  • dtime - Este es el tiempo de procesamiento.

  • ttime - Este es el tiempo total (es la suma de ctime y dtime, matemáticamente ttime = ctime + dtime).

  • wait - Este es el tiempo de espera.

Para obtener una visualización gráfica de cómo se relacionan estos elementos múltiples entre sí, eche un vistazo a la siguiente imagen:

Si estamos trabajando en una terminal o donde los gráficos no están disponibles, gnuplotes una gran opción. Lo entenderemos rápidamente siguiendo los siguientes pasos.

Instalemos y lancemos gnuplot -

$ sudo apt-get install gnuplot  
$ gnuplot

Output

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

Como estamos trabajando sobre el terminal y suponiendo que los gráficos no estén disponibles, podemos elegir el terminal tonto que dará salida en ASCII sobre el propio terminal. Esto nos ayuda a tener una idea de cómo se ve nuestra trama con esta herramienta rápida. Preparemos ahora la terminal para el diagrama ASCII.

gnuplot> set terminal dumb

Output

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

Como, nuestra terminal gnuplot ahora está lista para el trazado ASCII, tracemos los datos del out.data archivo -

gnuplot> plot "out.data" using 9  w l

Output

1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

Hemos graficado el ttime, tiempo total (en ms) de la columna 9, con respecto al número de solicitudes. Podemos notar que para las peticiones de diez iniciales, el tiempo total fue en los cerca de 100 ms, para los próximos 30 peticiones (de 10 º a 40 º ), aumentó a 1100 ms, y así sucesivamente. Tu trama debe ser diferente dependiendo de tuout.data.