Cuando se quiere monitorizar un servidor Apache, debemos conocer algunos aspectos:
- Cuantas peticiones puede soportar
- Velocidad a la que responde peticiones
- Cuál es el tiempo de espera
- Qué aplicaciones o servicios se pueden mejorar u optimizar
La herramienta ApacheBench está en los repositorios de Linux y como una librería del servidor Apache y por lo tanto es libre, software de código abierto y utiliza la licencia Apache.
Este tipo de prueba es muy fácil de hacer en una forma rápida mediante el uso del comando ab de Apache Bench.
Esta prueba nos mostrará rápidamente si hay un problema inmediato con la instalación Apache y por ello responde mal.
También nos ayuda con la siguiente pregunta ¿Hasta dónde puedo utilizar o forzar el servidor y sus recursos web con Apache, PHP, y MySQL? (con conexiones simultáneas y página de solicitud de carga), más lo que debemos optimizar en la configuración de Apache y PHP para obtener un mejor rendimiento y eliminar los problemas de respuesta a las peticiones de los visitantes.
1. Instalación de ApacheBench en servidores Linux
sudo apt-get install -y apache2 sudo apt-get install apache2-utils
yum install httpd-tools
Vamos a realizar pruebas con distintos dominios e ip. Comenzaremos abriendo una ventana de terminal y realizamos los siguientes test:
Servidor local o localhost también ip 127.0.0.1
ab 127.0.0.1/localhost
2. Consultas
Veamos una consulta con parámetros. Enviamos 100 peticiones en grupos de 30 por vez a google.com y guardamos los datos obtenidos en un archivo csv, el código es el siguiente:
ab -g datos.csv -n 100 -c 30 google.com/
Server Software: GFE/2.0 //Sitema operativo Google web server basado en Linux Server Hostname: google.com Server Port: 80 Document Path: / Document Length: 262 bytes Concurrency Level: 30 Time taken for tests: 1.370 seconds Complete requests: 100 Failed requests: 0 Non-2xx responses: 100 Total transferred: 53100 bytes HTML transferred: 26200 bytes Requests per second: 73.01 [#/sec] (mean) //promedio por petición Time per request: 410.899 [ms] (mean) //promedio por petición Time per request: 13.697 [ms] (mean, across all concurrent requests) //promedio por total Transfer rate: 37.86 [Kbytes/sec] received Connection Times (ms) //Tiempos de conexión, proceso y espera min mean[+/-sd] median max Connect: 42 81 53.0 73 446 Processing: 48 190 265.7 88 1286 Waiting: 46 114 148.2 86 1246 Total: 114 270 274.7 150 1369 Percentage of the requests served within a certain time (ms) 50% 150 66% 203 75% 222 80% 243 90% 844 95% 953 98% 1088 99% 1369 100% 1369 (longest request)
Vemos que respondió 73 peticiones por segundo con un tiempo promedio por petición 410.899 milisegundos y una tasa de transferencia de 37.86 Kbytes/seg, también vemos como varia el tiempo conexión, proceso y tiempo de espera.
El archivo de datos CSV tendrá la siguiente estructura.
(starttime) Tue Mar 24 11:53:03 2015 - (seconds) 1427208783 - (ctime) 46 - (dtime) 68 - (ttime) 114 - (wait) 66 (starttime) Tue Mar 24 11:53:03 2015 - (seconds) 1427208783 - (ctime) 46 - (dtime) 74 - (ttime) 120 - (wait) 72 (starttime) Tue Mar 24 11:53:03 2015 - (seconds) 1427208783 - (ctime) 64 - (dtime) 56 - (ttime) 120 - (wait) 56
A continuacion desde la terminal con un editor de textos crearemos un archivo de texto para evaluar multiples url de un mismo dominio. La herramienta ApacheBench soporta hasta 20 mil URL como las siguientes.
El archivo tendrá la siguiente estructura:
http://ejemplo.com/index.html/ http://ejemplo.com/noticias.html/ http://subdominio.ejemplo.com/Probamos una petición por vez:
ab -g datos.csv -n 1000 urls.txtEn este caso, ApacheBench recoge las direcciones de urls.txt y envía peticiones al servidor. El nombre de dominio de las direcciones URL debe ser el mismo para todas las URL.
Se trata de 100 páginas que se cargan por 10 usuarios simultáneos y recurrentes diferentes, cada usuario está haciendo 10 páginas que cargan o son mostradas en forma secuencial en cada petición.
Probamos:
ab -l -r -n 100 -c -k 10 http://www.ejemplo.com/clientes/Esto representa una carga máxima de un sitio web que recibe alrededor de 100.000 visitas al mes que debe soportar y responder el servidor.
ab -l -r -n 1000 -c -k50 http://www.ejemplo.com/chat/Esto puede ser utilizado para probar un blog o un sistema donde los usuarios o visitantes comenten mucho enviando muchas peticiones como un chat o sistema de comentarios como facebook.
Este tipo de prueba puede equivaler al trafico de un sitio web o un blog muy activo.
<html> <head><title>AB Test Php y MySQL</title></head> <body> <?php $link = mysql_connect("localhost", "usuario", "clave"); mysql_select_db("bdventas"); $query = "SELECT * FROM clientes"; $result = mysql_query($query); while ($line = mysql_fetch_array($result)) { foreach ($line as $value) { print "$value\n"; } } mysql_close($link); ?> </body> </html>Enviamos 10000 peticiones al script y por lo tanto a MySQL.
ab -n 1000 -c 5 http://190.165.210.108/absql.php
Analizar los resultados de cada testeo con ApacheBench. Los datos mas importantes son aquellos que nos brindan información de peticiones y respuesta del servidor:
2. ¿Hay algún error en la página web o de configuración de Apache? Cuando el servidor tarde en responder o se caiga, deberemos analizar si problemas de memoria o alto consumo de recursos.
3. ¿A qué nivel de concurrencia comenzara a ponerse lento la capacidad de respuesta o colapsara el servidor Apache y cuanto sera el tiempo de espera? Si esto está ocurriendo en un nivel de concurrencia bajo, algo está mal deberemos saber que es y que se necesita para que funcione tal vez mas recursos de servidor.
3. Factores a tener en cuenta para mejorar el rendimiento en Apache
2. php_memcache gestiona la caché de datos para scripts PHP y consultas. Esto puede producir un aumento 50% -100% de rendimiento en las paginas web.
3. Los plugins caché para Joomla, WordPress, PrestaShop y algunos Frameworks o CMS.
4. Modulo mod_expires de Apache para hacer usar la caché del visitante y mantener páginas un tiempo determinado, en lugar de volver a realizar una petición a esas páginas y tener que volver a cargar, sirve si la web no cambia su contenido a cada minuto.
Otro aspecto que afecta mucho el rendimiento de Apache es PHP y MySQL, mejorando el rendimiento de MySQL optimizando la configuración del archivo my.ini de xampp, wampp o lampp y optimizar las consultas o peticiones a la web que utiliza php y genera contenido desde MySQL, tratando de optimizar la utilización de registro de consultas lentas de MySQL para ver cuál es el problema y mejorar el rendimiento.
Si queréis más info de uso sobre AppacheBench.
Gracias Sergio, guardado como favorito.