jueves, 3 de abril de 2014

Práctica 4: medida de prestaciones en servidores web

En la práctica 4 que comenzaremos la semana próxima (del 7 al 11 de abril) y continuaremos tras la Semana Santa, utilizaremos varias herramientas para comprobar el rendimiento de servidores web.

Disponemos de varias herramientas, tanto de línea de comandos como con interfaz gráfica:
  • Apache Benchmark
  • httperf
  • OpenWebLoad
  • The Grinder
  • OpenSTA
  • JMeter
Las de línea de comandos sobrecargan menos las máquinas que estamos usando.

Estas herramientas permiten comprobar el rendimiento de cualquier servidor web (Apache, MS Internet Information Services -IIS-, nginx, Cherokee, Tomcat, lighttpd, thttpd, etc), y se suelen usar para comprobar el rendimiento del hardware, software o de alguna modificación que le hayamos hecho.


Usar Apache Benchmark (ab)
ab no simula con total fidelidad el uso del sitio web que pueden hacer los usuarios habitualmente. Pide la misma página repetidamente. Sin embargo, los usuarios reales no solicitan siempre la misma página, por lo que las medidas dan una idea aproximada del rendimiento del sitio, pero no reflejan el rendimiento real.

Va bien para testear cómo se comporta el servidor antes y después de modificar cierta configuración. Puesto que tenemos los datos del "estado base", podemos comparar cómo afecta una nueva configuración.

Debemos ejecutar el benchmark en otra máquina diferente a la que hace de servidor web. Ambos procesos no deben consumir recursos de la misma máquina (veríamos un menor rendimiento). Así pues, estando las tres máquinas de nuestra granja web en ejecución, desde otro máquina diferente (ya sea la anfitriona u otra máquina virtual) haremos las baterías de ejecuciones pidiendo páginas a la dirección IP del balanceador:


Cada vez que ejecutemos el test obtendremos resultados ligeramente diferentes. Esto es debido a que en el servidor hay diferente número de procesos en cada instante, y además la red puede encontrarse más sobrecargada en un momento que en otro.

Para ejecutar el benchmark ab usamos la sintaxis:

ab -n 1000 -c 5 http://maquina.com/prueba.html
  • -n 1000     =>  se solicita mil veces en total la URL
  • -c 5        =>  se hacen peticiones de 5 en 5 (concurrencia)

Nos quedaremos con las medidas de "Time taken for tests", "Failed requests", "Requests per second", "Time per request".

Una vez que terminemos las baterías de ejecuciones con la granja web, debemos repetirlas (las mismas cargas) contra una sola de las máquinas servidoras finales (p.ej. la IP de la máquina1). Así esperamos poder comparar cómo se comporta una sola máquina frente a la granja web ante diferentes cargas.


Usar httperf

httperf es una herramienta para medir el rendimiento de sitios web desarrollada en los laboratorios de investigación de Hewlett-Packard.

La sintaxis de ejecución es:

httperf --server maquina.com --uri /prueba.html --port 80 --num-conn 5000 --num-call 10 --rate 200 --timeout 5
  
En esa orden estamos haciendo un test del servidor maquina.com, puerto 80. httperf pedirá, de forma repetida, la página llamada "prueba.html" abriendo un total de 5000 conexiones TCP para hacer con cada una de ellas varias peticiones HTTP (implica hacer la petición y esperar la respuesta). Hará 10 peticiones por conexión, y las hará a 200 conexiones por segundo (implica 2000 peticiones/seg). Establece un timeout (número de segundos que el cliente esperará respuesta) tras el cual considerará que la llamada ha fallado.

En este caso nos quedaremos con las medidas de "Request rate" y "Errors".

Tanto en esta herramienta como en la siguiente, repetiremos la forma de proceder que hemos explicado para el ab. Los valores que obtengamos con ab, httperf u OpenWebLoad no son comparables, ya que se trata de métricas diferentes, y obtenidas con software que trabaja de muy diferente forma.


Usar OpenWebLoad

OpenWebLoad es otra herramienta de línea de comandos para medir el rendimiento de servidores web:

openload -l 20 http://maquina.com 10

El programa recibe varios parámetros, muy similares a los de las herramientas anteriores:
  • El tiempo en segundos que queremos ejecutarlo (opción -l).
  • La URL de la página en el servidor.
  • El número de clientes simultáneos que simularemos (es un parámetro opcional y el valor por defecto es 5).
En este caso, recogeremos los valores obtenidos de "Total TPS" y "Avg. Response time".

1 comentario:

  1. Además, influye mucho el tipo de archivo que estemos solicitando al servidor en cada petición. No es lo mismo un HTML de unos pocos bytes, que si pedimos una página pesada con imágenes, o que se ejecute un script PHP dinámico.

    Así pues, recomiendo que optéis por una de las siguientes opciones para hacer la página que se pedirá repetidamente en las baterías de ejecuciones:

    (1) hacer una página HTML con bastante texto y que incluya un par de imágenes de 100 o 200 KB

    (2) hacer un script PHP que haga que cada petición sea costosa en tiempo. Por ejemplo, os dejo el archivo prueba.php que será el que pidáis con las tres herramientas:
    https://dl.dropboxusercontent.com/u/4144051/prueba.php


    ResponderEliminar