Apache Bench es una pequeña herramienta útil para probar el tiempo de respuesta de un servicio web y, por lo tanto, el rendimiento del servidor web. Podemos especificar la cantidad de solicitudes a enviar, la URL de destino, configurar la concurrencia, solo por nombrar algunas de las configuraciones de esta herramienta.
Si bien tales cargas de trabajo simuladas no darán como resultado exactamente los mismos datos que generará el tráfico del mundo real, siempre es una buena idea probar antes de pasar a producción. Tal vez antes de implementar una nueva versión de la aplicación, podríamos ejecutar las pruebas en la nueva versión y comparar los resultados con los datos de prueba anteriores para ver si nuestra aplicación funcionará más lento o más rápido que la última versión. Con pruebas bien planificadas, esta herramienta puede mostrar los posibles cuellos de botella de la aplicación y puede proporcionar puntos de interés en los que deberíamos buscar en nuestro código para una posible optimización.
En este tutorial, instalaremos Apache Bench en Red Hat Enterprise Linux 8, así como un servidor web Apache para ejecutar algunas pruebas.
En este tutorial aprenderás:
- Cómo instalar Apache Bench
- Cómo instalar el servidor web httpd y agregar contenido básico
- Cómo ejecutar pruebas simples contra el servidor web
Ejecución de pruebas de rendimiento contra el servidor web local con Apache Bench.
Requisitos de software y convenciones utilizadas
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Red Hat Enterprise Linux 8 |
Software | Apache Bench 2.3 |
Otro | Acceso privilegiado a su sistema Linux como root o a través de sudo comando. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Cómo instalar Apache Bench en Redhat 8 instrucciones paso a paso
Apache Bench está disponible en las fuentes de software base después de habilitar los repositorios de administración de suscripciones junto con Apache httpd
Servidor web. Para probar nuestra herramienta, agregaremos contenido básico al servidor web, tanto estático como escrito en php
.
- Para instalar Apache Bench, que se encuentra en las
httpd-tools
paquete, usaremos dnf
:# dnf install httpd-tools
- Para crear un entorno de prueba usaremos nuestro
ab
herramienta activada, instalaremos un servidor web con soporte php:# dnf install httpd php
- Agregaremos una página HTML estática
/var/www/html/index.html
con el siguiente contenido:<html>
<head>
<title>Title of the webpage</title>
</head>
<body>
<p>This is a simple html page.</p>
</body>
</html>
Y otra página que da como resultado el mismo contenido, pero está escrita en php de manera intencionalmente derrochadora. El archivo será /var/www/html/index.php
, con el siguiente contenido:
<?php
echo "<html>\n";
echo "<head>\n";
echo "<title>Title of the webpage</title>\n";
echo "</head>\n";
echo "<body>\n";
echo "<p>This is a simple html page.</p>\n";
echo "</body>\n";
echo "</html>\n";
?>
Tenga en cuenta que como servimos texto estático, solo necesitaríamos un echo
, o sin php en absoluto. Solo creamos esta página para ver la diferencia en los tiempos de respuesta.
- Podemos iniciar nuestro servidor web:
# systemctl start httpd
- No necesitamos
root
privilegios para la evaluación comparativa. Para la primera prueba, ejecutaremos ab
contra la página estática index.html
, proporcionando 100000 solicitudes (-n) para la página en 10 subprocesos simultáneos (-c), dentro del plazo máximo de 60 segundos (-t). En la máquina de laboratorio, esta cantidad de solicitudes se atenderá en un minuto, pero dependiendo del hardware, esto puede no ser suficiente. También tenga en cuenta que eliminamos el tráfico de red real mediante la evaluación comparativa de localhost, y empujamos la carga de ejecutar las solicitudes y atenderlas en el mismo hardware.
$ ab -t 60 -n 100000 -c 10 http://localhost/index.html
This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
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 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests
Server Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80
Document Path: /index.html
Document Length: 116 bytes
Concurrency Level: 10
Time taken for tests: 19.556 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 39600000 bytes
HTML transferred: 11600000 bytes
Requests per second: 5113.63 [#/sec] (mean)
Time per request: 1.956 [ms] (mean)
Time per request: 0.196 [ms] (mean, across all concurrent requests)
Transfer rate: 1977.53 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 0 2 0.8 2 26
Waiting: 0 1 0.7 1 26
Total: 0 2 0.8 2 26
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 5
100% 26 (longest request)
- La segunda prueba se ejecutará con el mismo conjunto de parámetros, pero contra la página php derrochadora
index.php
.
$ ab -t 60 -n 100000 -c 10 http://localhost/index.php
This is ApacheBench, Version 2.3 <$Revision: 1826891
gt;
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 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests
Server Software: Apache/2.4.35
Server Hostname: localhost
Server Port: 80
Document Path: /index2.php
Document Length: 116 bytes
Concurrency Level: 10
Time taken for tests: 35.064 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 30700000 bytes
HTML transferred: 11600000 bytes
Requests per second: 2851.89 [#/sec] (mean)
Time per request: 3.506 [ms] (mean)
Time per request: 0.351 [ms] (mean, across all concurrent requests)
Transfer rate: 855.01 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 1 3 1.2 3 27
Waiting: 0 3 1.2 3 27
Total: 1 3 1.3 3 28
Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 4
90% 5
95% 6
98% 7
99% 7
100% 28 (longest request)
It isn't a big surprise what the results show. The static content is served much faster than the wasteful page that also need to go trough the php interpreter. And with this we have shown in a simple example how the Apache Bench tool can be used to gather statistics on the response time of our webservices.