Cargando



Monitorizar el desempeño o rendimiento de un servidor Apache

Todos los administradores de red realizan diversos procedimientos para saber que rendimiento tiene un servidor. En este tutorial os muestro como poder monitorear el rendimiento de Apache.


mar 29 2015 19:27
Profesional
ago 08 2016 11:33

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
Para medir el rendimiento de un servidor utilizaremos usaremos una herramienta llamada Apache Benchmark o ApacheBench.

 

ApacheBench
ApacheBench es un software informático que se ejecuta en línea de comandos para medir el rendimiento especialmente de servidores web y el servicio http. Este software fue desarrollado para probar el servidor Apache HTTP, pero al ser una herramienta para testear servicios http es posible utilizarlo para probar cualquier servidor web como Nginx, Lighttpd.

 

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


Ubuntu/Debian
sudo apt-get install -y apache2
sudo apt-get install apache2-utils

 

Redhat/Centos
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

 

apache.jpg

 

 

 

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/

apache2.jpg

 

Analizamos el resultado
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.

 

Estructura CSV
(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.txt
En 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.

 

Caso donde 10 usuarios simultáneos realizan cada uno 10 visitas a la página web

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.

 

Caso donde 50 usuarios simultáneos visitan la misma página web 20 veces
Se trata de que el servidor responda 1000 páginas osea 50 usuarios por 20 peticiones al mismo tiempo, cada usuario está realizando 20 consultas a páginas en secuencial:
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.

 

Prueba rápida PHP y MySQL
Creamos una base de datos mysql cualquiera o si tenemos una para probar la utilizamos, luego creamos el script php denominado absql.php
<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:

 

Analizar resultados ApacheBench
1. ¿Cuántas peticiones por segundo puede atender el servidor viendo? Los otros indicadores no son muy útiles, ya que no son representativos de algo real en este contexto.

 

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


Rendimiento Apache
1. Módulo mod_cache de Apache a la página del caché de peticiones / resultados. Esto producirá una mejora de 5 a 10 veces de rendimiento sobre todos los otros métodos combinados.

 

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.


¿Te ayudó este Tutorial?


2 Comentarios


Fran Pazos
mar 30 2015 23:59

Gracias Sergio, guardado como favorito.

+1, gracias

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X