Benchmark Apache y MySQL en CentOS

Decir que este post es un benchmark en toda regla es muy ambicioso, lo que voy a hacer es compartir los datos que he obtenido en mi caso particular que tal vez puedan ser aplicados a otros casos en los cuales no creo que difieran mucho los resultados globales.

Para los que no estén familiarizados con el tema, un benchmark no es más que una comparativa, en este caso será medir el rendimiento de Apache y MySQL luego de una actualización de versiones.

Servidor de pruebas de carga:

  • Sistema Operativo: CentOS 5.5 (Final)
  • Versión Núcleo de Linux: 2.6.18-194.17.4.el5
  • Versión GCC: 4.1.2 20080704 (Red Hat 4.1.2-48)
  • CPU: 4 x Six-Core AMD Opteron(tm) Processor 2423 HE 2009 MHZ
  • RAM: 5 GB

Versiones y programas a comparar:

  • Apache 2.2.3 vs. 2.2.8
  • PHP 5.2.10 vs 5.3.5
  • MySQL 5.0.64 vs 5.5.8

En el siguiente gráfico se muestra el consumo de CPU durante una semana, la línea roja significa el momento de la actualización:

cpu_usage_all

Según se puede ver no hay cambios significativos en el rendimiento general de la máquina, luego veremos el por qué. En la siguiente gráfica veremos el consumo total de RAM también en ese mismo intervalo de tiempo y con el mismo resultado aparente, la línea azul es el momento de la actualización:

memory_usage_all

Hasta ahora no se notan globalmente cambios en el rendimiento general de la máquina, veamos rendimientos concretos.

Nota: el momento de la actualización es el espacio en blanco en todos los gráficos siguientes.

Comparativa de carga de MySQL entre las versiones 5.0.64 y la 5.5.8

El siguiente gráfico muestra la comparativa del rendimiento de la CPU entre estas versiones de MySQL:

cpu_usage_mysql_after

Ahora veamos el uso de la memoria RAM

memory_usage_mysql_after

Conclusiones: Es notable el descenso del consumo de la CPU en MySQL 5.5.8 pero al coste de un incremento también notable y en proporción de la memoria RAM. Si tenemos en cuenta que aumentar la CPU en cualquier hosting es mucho más caro que aumentar la RAM es rentable actualizar MySQL a versiones actuales donde se ha optimizado su uso de la CPU a riesgo de consumir algo más de memoria RAM.

Comparativa de carga de Apache (httpd) entre las versiones 2.2.3.y la 2.2.8 con PHP 5.2.10 a la 5.3.5

Veamos el consumo de CPU

cpu_usage_apache_after

Y ahora el consumo de memoria RAM de apache y php

memory_usage_apache_after

Conclusiones: Según podemos observar y pese a ser la actualización de apache una actualización menor (2.2.3 a la 2.2.8) observamos un incremento considerable tanto en la RAM como en el consumo de la CPU, con estos datos previos se podría suponer que PHP 5.3.5 es menos óptimo que PHP 5.2.10 lo cual es un grave error. Entonces ¿qué es lo que falla en mi análisis?

La respuesta es muy simple y parte del motivo de la actualización del sistema, el aumento considerable del número de visitantes, llegando incluso a ralentizar el servidor y las peticiones httpd pues el servidor MySQL no podía procesar todas las peticiones y cargaba en exceso a la CPU del sistema. Según hemos visto en los gráficos anteriores el consumo de recursos como media general ha subido pero esto se debe al aumento de visitantes, esto es lógico, antes un visitante no podía entrar por estar saturada la CPU con peticiones de MySQL y ahora al optimizarse su consumo de CPU con la versión 5.5.8 se permite la entrada de peticiones de un mayor número de usuarios y con ello el aumento del consumo de recursos de apache y PHP.

Veamos la gráfica de visitantes, el momento de la actualización es la línea roja:

visitantes

Las conclusiones finales de esta comparativa o benchmark a las que he llegado son las siguientes:

  • MySQL se ha optimizado mucho en las versiones 5.5 para garantizar el mínimo consumo de CPU con un ligero aumento de consumo de RAM, más barata y más fácil de aumentar en cualquier hosting online donde se tenga un servidor cloud o dedicado.
  • Apache + PHP consumen mucha menos CPU que MySQL pero a su vez consume mucha más memoria RAM y lógicamente esto es directamente proporcional al número de usuarios.
  • No hay mejoras de rendimiento significativas entre PHP 5.2.10 y PHP 5.5.3
  • No existen tampoco mejoras de rendimiento notables entre Apache 2.2.3 y apache 2.2.8 lo cuál es lógico teniendo en cuenta que es una actualización menor.

¿Y en vuestros casos?

Comentarios

jm ha dicho que…
Excelente artículo y muy interesante. En lo particular, estoy viviendo un memory leak en mi servidor. Tengo aproximadamente 7 sitios con Wordpress y aleatoriamente la demanda de memoria sube. Estoy tuneando apenas apache y seguiré por MySQL, pero con los datos que compartes, es muy bueno darse una idea de como atacar las diferentes áreas. Mi experiencia es completamente en Java+Apache+Oracle y este terreno de PHP+MySQL+Apache es relativamente nuevo.

Saludos.
JM
Reynier ha dicho que…
Gracias por el comentario espero que puedas optimizar tu server
Anónimo ha dicho que…
Gracias por Test , agradezco el post. Una pregunta, con que herramienta obtienes esas Gráficas Gracias Amigo .
Reynier ha dicho que…
Las gráficas viene por defecto con el monitor de rendimiento del Plesk.