Si queremos poner a prueba un servidor web disponemos de la herramienta ab (Apache Benchmarking tool) que nos permite lanzar una simulación de carga. Esta herramienta permite simular la solicitud simultanea de múltiples usuarios contra el servidor. Ciertamente una prueba sintética no es como una situación real, pero nos ayuda a conocer las prestaciones de nuestro servidor.
Instalación
La utilidad ab se encuentra en el paquete apache2-utils. Podemos instalarlo en cualquier equipo linux que tenga acceso a nuestro servidor. No requiere por tanto de la instalación de todo el servicio Apache. Para instalarlo en sistemas tipo Ubuntu usaremos el siguiente comando:
sudo apt-get install apache2-utils
Tras unos segundos la aplicación se instalará y quedará lista para su uso.
Utilización básica
El modo de utilización básico de la herramienta ab tan solo requiere que le indiquemos la url destino a revisar. El numero de conexiones y cuantas de ellas se realizaran simultáneamente. Con el parámetro -n indicamos las conexiones, con el parámetro -c la concurrencia y posteriormente indicamos la url. Vamos el ejemplo:
ab -n 100 -c 10 http://192.168.1.129/
En 192.168.1.129 tengo una servidor LAMP sobre Ubuntu Server 10.04 ejecutándose en una máquina virtual. Con -n 100 le pedimos 100 conexiones y con -c 10 una concurrencia de 10.
Interpretación de los resultados
Hay que tener claro que lo que estamos poniendo a prueba es el documento o aplicación alojada en la url que le indicamos. Si en la url tan solo hay con pequeño index.html describiendo el típico ¡Hola Mundo!, no es para nada comparable con un CMS como WordPress que ejecuta un denso código php y hace varias llamadas a la base de datos Mysql. Además, la prueba es sobre la entrega del documento html y no sobre la multitud de otros elementos que se cargarían posteriormente para generar la presentación en un navegador, como podrian ser css, javascript, imágenes, etc.
Aclarado esto vemos los resultados del comando usado anteriormente.
Document Path: / Document Length: 36 bytes Concurrency Level: 10 Time taken for tests: 0.602 seconds Complete requests: 100 Failed requests: 54 (Connect: 0, Receive: 0, Length: 54, Exceptions: 0) Write errors: 0 Total transferred: 24641 bytes HTML transferred: 3541 bytes Requests per second: 166.05 [#/sec] (mean) Time per request: 60.224 [ms] (mean) Time per request: 6.022 [ms] (mean, across all concurrent requests) Transfer rate: 39.96 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.5 1 2 Processing: 6 58 33.5 55 157 Waiting: 6 46 29.5 37 157 Total: 7 59 33.6 56 159
En los resultados podemos ver datos interesantes como el tiempo que emplea en realizarse el test o la cantidad de datos que se transmiten. Destacable me parecen los datos de la tabla Connection Time, donde podemos ver el tiempo empleado en conectar con el servidor contra el tiempo empleado para generar el documento.
Conclusiones
Esta es una pequeña aproximación al comando ab. En la página del manual de ab encontramos una descripción de las decenas de opciones disponibles.