Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Gestión de pruebas Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

¿Conoce el tiempo medio de respuesta de su sitio web? ¿Sabe cuántos usuarios simultáneos puede manejar su sitio?

Las pruebas de carga son esenciales para que las aplicaciones web conozcan la capacidad del sitio web. Si va a elegir el servidor web, una de las primeras cosas que debe hacer es realizar las pruebas de carga y ver cuál le funciona bien

La evaluación comparativa puede ayudarle a decidir

  • Qué servidor web funciona mejor
  • Número de servidores que necesita para servir x número de peticiones
  • Qué configuración le da los mejores resultados
  • Qué pilas tecnológicas rinden mejor
  • Cuándo su sitio funcionará más lento o se estropeará

Existen varias herramientas en línea para realizar una prueba de estrés; sin embargo, si busca una solución interna o desea realizar una evaluación comparativa sólo del rendimiento del servidor web, puede utilizar ApacheBench y, alternativamente, algunas de las herramientas que se enumeran a continuación

He utilizado un servidor web Apache y Nginx alojado en DigitalOcean para realizar la prueba

ApacheBench

ApacheBench (ab) es un programa de línea de comandos de código abierto que funciona con cualquier servidor web. En este post, explicaré cómo instalar este pequeño programa y realizar la prueba de carga para comparar los resultados

Apache

Vamos a instalar ApacheBench mediante el comando yum

yum install httpd-tools

Si ya tiene httpd-tools, entonces puede ignorar esto

Ahora, veamos cómo se comporta para 5000 peticiones con una concurrencia de 500

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
Esto es ApacheBench, Versión 2.3 <$Revisión: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Con licencia de The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (sea paciente)
Completadas 500 peticiones
Completadas 1000 peticiones
Completadas 1500 peticiones
Completadas 2000 peticiones
Completadas 2500 peticiones
Completadas 3000 peticiones
Completadas 3500 peticiones
Completadas 4000 peticiones
Completadas 4500 peticiones
Completadas 5000 peticiones
Completadas 5000 peticiones
Software del servidor:        Apache/2.2.15
Nombre del servidor: localhost
Puerto del servidor: 80
Ruta del documento:          /
Longitud del documento: 4961 bytes
Nivel de concurrencia: 500
Tiempo empleado en las pruebas:   13.389 segundos
Peticiones completadas:      5000
Peticiones fallidas:        0
Errores de escritura:           0
Respuestas no-2xx:      5058
Total transferido      26094222 bytes
HTML transferido:       25092738 bytes
Solicitudes por segundo: 373,45 [#/seg] (media)
Tiempo por solicitud: 1338,866 <x><x><x>[ms]</x></x></x> (media)
Tiempo por solicitud: 2,678 <x><x><x>[ms]</x></x></x> (media, entre todas las solicitudes simultáneas)
Velocidad de transferencia:          1903.30 [Kbytes/seg] recibidos
Tiempos de conexión (ms)
mín media[ /-sd] mediana máx
Conectar:        0 42 20,8 41 1000
Procesando:     0 428 2116,5 65 13310
Esperando:

0 416 2117

.7 55 13303
Total: 51 470 2121.0 102 13378
Porcentaje de las peticiones servidas en un tiempo determinado (ms)
50% 102
66% 117
75% 130
80% 132
90% 149
95% 255
98% 13377
99% 13378
100% 13378 (petición más larga)
[root@lab ~]#

Como puede ver, Apache ha gestionado 373 peticiones por segundo, y ha tardado un total de 13,389 segundos en servir el total de peticiones

Ahora ya sabe que la configuración por defecto puede servir tantas peticiones, así que cuando haga algún cambio en la configuración puede volver a hacer la prueba para comparar los resultados y elegir el mejor

Nginx

Hagamos la prueba igual que hicimos con Apache para que pueda comparar cuál rinde mejor

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
Esto es ApacheBench, Versión 2.3 <$Revisión: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Con licencia de The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (sea paciente)
Completadas 500 peticiones
Completadas 1000 peticiones
Completadas 1500 peticiones
Completadas 2000 peticiones
Completadas 2500 peticiones
Completadas 3000 peticiones
Completadas 3500 peticiones
Completadas 4000 peticiones
Completadas 4500 peticiones
Completadas 5000 peticiones
Completadas 5000 peticiones
Software del servidor: nginx/1.10.1
Nombre del host del servidor: localhost
Puerto del servidor: 80
Ruta del documento:          /
Longitud del documento: 3698 bytes
Nivel de concurrencia: 500
Tiempo empleado en las pruebas:   0.758 segundos
Peticiones completadas:      5000
Peticiones fallidas:        0
Errores de escritura:           0
Total transferido:      19660000 bytes
HTML transferido:       18490000 bytes
Solicitudes por segundo: 6593,48 [#/seg] (media)
Tiempo por solicitud: 75,832 <x><x><x>[ms]</x></x></x> (media)
Tiempo por solicitud: 0,152 <x><x><x>[ms]</x></x></x> (media, entre todas las solicitudes simultáneas)
Velocidad de transferencia: 25317,93 [Kbytes/seg] recibidos
Tiempos de conexión (ms)
min media[ /-sd] mediana máx
Conectar:        0 6 11,0 2 53
Procesando:     5 19 8,2 17 53
Esperando:

0 18 8.2 16 47


Total: 10 25 17.4 18 79
Porcentaje de las solicitudes servidas en un tiempo determinado (ms)
50% 18
66% 21
75% 21
80% 22
90% 69
95% 73
98% 75
99% 76
00% 79 (solicitud más larga)
[root@lab ~]#

¡WOW!

¿Lo ha visto?

¡Nginx manejó 6593 peticiones por segundo! Un ganador

Así que ya ve solo comparando con dos servidores web se hará una idea de cual elegir para su aplicación web

La prueba anterior es en CentOS 6.8, 64 bits. Puede probar varias combinaciones de SO y versión de servidor web para obtener resultados óptimos

¿No le gusta ApacheBench por la razón que sea? No se preocupe, hay muchos otros que puede utilizar para realizar la carga HTTP

SIEGE

SIEGE es una utilidad de prueba de carga HTTP compatible con UNIX. Puede poner varias URL en un archivo de texto para realizar pruebas de carga contra ellas. Puede instalar siege usando yum

# yum install siege

Vamos a ejecutar la prueba con 500 peticiones concurrentes durante 5 segundos

[root@lab ~]# siege -q -t 5S -c 500 http://localhost/
Levantando el siege del servidor... hecho.
Transacciones:                       4323 accesos
Disponibilidad: 100,00 %
Tiempo transcurrido:                       4.60 segundos
Datos transferidos:        15.25 MB
Tiempo de respuesta: 0,04 s
Tasa de transacciones:       939.78 trans/seg
Rendimiento: 3,31 MB/seg
Capacidad de concurrencia: 37,97
Transacciones con éxito:        4323
Transacciones fallidas:                0
Transacción más larga:            1.04
Transacción más corta:

0.00

[root@lab ~]#

Para desglosar los parámetros

-q – para ejecutarlo silenciosamente (sin mostrar los detalles de la solicitud)

-t – ejecutar durante 5 segundos

-c – 500 peticiones concurrentes

Como puede ver, la disponibilidad es del 100% y el tiempo de respuesta es de 0,04 segundos. Puede ajustar el parámetro de la prueba de carga en función de su objetivo

Ali

Ali es una herramienta de pruebas de carga relativamente nueva para realizar análisis en tiempo real. Admite múltiples plataformas para su instalación, incluida Docker

Una vez instalada, ejecute ali para ver los detalles de uso

root@lab:~# ali
no target given
Uso:
 ali [flags] <target URL>

Flags:
 -b, --body string El cuerpo de la petición que se enviará.
 -B, --body-file string La ruta al archivo cuyo contenido se establecerá como cuerpo de la petición http.
 --debug Ejecutar en modo de depuración.
 -d, --duration duration La cantidad de tiempo para emitir peticiones a los objetivos. Dé 0s para un ataque infinito. (por defecto 10s)
 -H, --header strings Una cabecera de petición a enviar. Puede utilizarse varias veces para enviar varias cabeceras.
 -k, --keepalive Utilice conexiones persistentes. (por defecto true)
 -M, --max-body int Máx. bytes a capturar de los cuerpos de respuesta. Dé -1 para no tener límite. (por defecto -1)
 -m, --method string Un método de petición HTTP para cada petición. (por defecto "GET")
 -r, --rate int La tasa de peticiones por segundo a emitir contra los objetivos. Si da 0, enviará las peticiones lo más rápido posible. (por defecto 50)
 -t, --timeout duration El tiempo de espera para cada petición. 0s significa desactivar los tiempos de espera.

(por defecto 30s

)
 -v, --version Imprime la versión actual.

Ejemplos:
 ali --duration=10m --rate=100 http://host.xz

Autor:
 Ryo Nakao <ryo@nakao.dev>
root@lab:~#

Como puede ver arriba, tiene la opción de enviar cabeceras HTTP, duración de la prueba, límite de velocidad, tiempo de espera y más. Hice una prueba rápida en Geekflare Tools y este es el aspecto de la salida

El informe es interactivo y ofrece información detallada sobre la latencia

Gobench

Gobench está escrito en lenguaje Go y es una sencilla utilidad de pruebas de carga para evaluar el rendimiento del servidor web. Soporta más de 20.000 usuarios concurrentes, cosa que ApacheBench no hace

Apache JMeter

JMeter es una de las herramientas de código abierto más populares para medir el rendimiento de las aplicaciones web. JMeter es una aplicación basada en java y no sólo un servidor web, pero se puede utilizar contra PHP, Java. ASP.net, SOAP, REST, etc

JMeter tiene una GUI amigable y decente, y la última versión 3.0 requiere Java 7 o superior para lanzar la aplicación. Debe darle una oportunidad a JMeter si su objetivo es optimizar el rendimiento de la aplicación web

wrk

wrk es otra herramienta moderna de medición del rendimiento para poner una carga en su servidor web y darle detalles de latencia, peticiones por segundo, transferencia por segundo, etc

Con wrk, puede especificar ejecutar una prueba de carga con un número de hilos

Tomemos como ejemplo la ejecución de una prueba durante 5 minutos con 500 usuarios concurrentes con 8 hilos
wrk

-t8 -c500 -d300s http://localhost

Cañón automático

Inspirado en el trabajo, autocannon está escrito en Node.js. Puede utilizarlo mediante programación, a través de la API o de una utilidad independiente. Todo lo que necesita es NodeJS instalado como requisito previo

Puede controlar el número de conexiones, las peticiones, la duración, los trabajadores, el tiempo de espera, la tasa de conexión y ofrece toneladas de opciones para evaluar sus aplicaciones web

Cargador de curl

curl-loader está escrito en C para simular la carga de la aplicación y es compatible con SSL/TLS. Junto con la prueba de páginas web, también puede utilizar esta herramienta de código abierto para realizar la carga en servidores FTP

Puede crear un plan de pruebas con una mezcla de HTTP, HTTPS, FTP y FTPS en una única configuración por lotes

httperf

Httperf es una herramienta de alto rendimiento que se centra en pruebas comparativas a nivel micro y macro. Es compatible con los protocolos HTTP/1.1 y SSL

Si usted tiene el número esperado de usuarios concurrentes y busca probar si su servidor web puede servir un número de una solicitud, puede utilizar el siguiente comando

httperf --servidor localhost --port 80 --num-conns 1000 --rate 100

El comando anterior probará con 100 peticiones por segundo para 1000 peticiones HTTP

Tsung

Tsung es una herramienta de pruebas de estrés distribuida multiprotocolo para estresar servidores HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Soporta HTTP/1.0, HTTP/1.1, y las cookies se manejan automáticamente

Generar un informe es factible con Tsung

Conclusión

Espero que las herramientas de evaluación comparativa anteriores le den una idea sobre el rendimiento de su servidor web y decida cuál es la mejor para su proyecto

A continuación, no olvide supervisar el rendimiento de su sitio web.

  • Chandan Kumar
    Autor
    Chandan Kumar es el fundador de Geekflare. Ha ayudado a millones de personas a destacar en el ámbito digital. Apasionado de la tecnología, su misión es explorar el mundo y ampliar el crecimiento de profesionales y empresas.
Gracias a nuestros patrocinadores
Más lecturas sobre gestión de pruebas
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder