Etiquetas

, ,

Actualización: sigo estudiando el tema porque es muy raro, si pongo un proceso en bucle no consume el 100% de CPU, sino el 50%. Parece que hay un problema de medición (tanto localmente como lo que mide Amazon CloudWatch). Si descubro algo más lo pondré.

En enero de este año Amazon habilitó el uso general de sus nuevas instancias “m3” (las originales son m1). Además del almacenamiento SSD, estas instancias tienen -según ellos- más CPU (3 ECU vs 2 ECU de las m1). Para los servidores web de Menéame usamos instancias m1.medium, pero las m3.medium parecían más adecuadas, nos podíamos ahorrar alrededor del 50% del coste. No las cambié inmediatamente porque el espacio disponible en /mnt en las m3 es muy pequeño (sólo 4GB) y allí es donde generábamos los logs del NGInx.

Pero estos días Amazon también empezó a ofrecer almacenar los logs del balanceador de carga (ELB) en S3, por lo que habilté estos y deshabilité los generados por NGInx en las instancias. Así, ya no hacían faltan varias decenas de GB por cada 24 horas de funcionamiento de cada instancia y podíamos pasar a usar las instancias m3 sin ningún otro cambio. Lo hice a partir de las 12 de la noche, tal como es visible en el siguiente gráfico.

Cambio de instancias m1 a m3

El línea verde muestra el número medio (por minuto) de llamadas a scripts PHP por segundo. La línea amarilla el porcentaje acumulado de uso de CPU, y la línea azul clara el numero de instancias web. Se puede ver claramente como a partir del cambio a m3, el uso de CPU se ha incrementado y también la necesidad de más instancias para servir el mismo número de ejecuciones por segundo.

Los resultados son claros, al menos para la ejecución de scripts webs, la m3 son bastantes menos potentes que las m1. Lo contrario de lo que afirma Amazon. Me sorprende mucho, sobre todo porque se trata de hardware nuevo con mucha más memoria cache (25 MB) que las anteriores m1 (que suelen tener 5-6MB).

Habrá que volver a las m1.

Agregado

Diferencia de carga de CPU entre una instancia m1.medium y m3.medium ejecutándose bajo las mismas condiciones. La primera es una m1, la siguiente una m3.

m1

m3