¿Por qué Top informa un uso de CPU diferente al de CloudWatch?

9

topmuestra un uso promedio de la CPU durante las horas pico de aproximadamente el 20%, mientras que el monitoreo de CloudWatch muestra un uso promedio de la CPU del 40%. ¿Qué causa esta discrepancia?


fuente

Respuestas:

15

Una muy buena observación y nos hemos encontrado con esto también. Esto es lo que encontré:

Tenga cuidado al medir el uso de la CPU desde una instancia EC2. Es posible ver el uso de la CPU muy por debajo del 100% y, sin embargo, estar completamente maximizado. Confía en mí: estado allí, hecho eso. (Por cierto, CloudWatch CPUUtilization se mide desde fuera de la instancia y siempre es correcto).

Aquí hay una muy buena descripción de todo: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

En el ejemplo anterior, a la instancia m1.small EC2 se le asignaron 0.4 unidades de procesador y, por lo tanto, el 40% de CPU ocupada significa el porcentaje de uso del núcleo subyacente. Sin embargo, dado que el 40% es el recurso compartido máximo de CPU que se puede asignar a esta VM, el uso efectivo de CPU es 40% / 40% = 100%. Cuál es el número que muestra CloudWatch.

Si te preguntas de dónde viene el 40%, las matemáticas son bastante simples. El sistema Linux m1.small tiene derecho a 1 unidad de cómputo EC2 que proporciona la capacidad de CPU equivalente de un procesador Opteron 2007 de 1.0–1.2 GHz o un procesador Xeon 2007. Dado que la VM se ejecuta en una máquina con una velocidad de reloj de 2.6 GHz, tiene derecho a una participación del procesador del 38.4% al 46.2% en este nodo XEN en particular. Puede ejecutar el comando cat / proc / cpuinfo para descubrir la arquitectura de la CPU detrás de sus instancias EC2.

Preste especial atención a la sugerencia sobre cómo manejar herramientas que no conocen las matemáticas especiales:

Otra opción que se puede usar para actualizar las herramientas de monitoreo basadas en el agente o SNMP existentes, que no se integran con CloudWatch, es usar la métrica inactiva de la CPU. Todo lo que necesita hacer es reescribir las reglas para medir la CPU inactiva en lugar de la CPU ocupada. Por ejemplo, si tiene un umbral> 75% definido para CPU ocupada, cree una regla <25% para CPU inactiva. Si la CPU inactiva es 0, entonces su servidor está vinculado a la CPU.

Muy simple. Muy agradable.

Cuando ejecuta top dentro de la instancia EC2, está midiendo el uso de la CPU de la máquina física que ejecuta su instancia y otras. Este uso es incorrecto si desea medir el uso de CPU de su instancia solo (la unidad de cálculo EC2 asignada a su instancia).

Es por eso que las métricas de Cloudwatch son reales ya que se miden de forma externa a la instancia para las unidades de cómputo EC2 asignadas solo a su instancia.

Ver aquí: https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
fuente
En otras palabras, ambos tienen razón pero miden cosas diferentes.
bahamat
1
Podrías decirlo de esa manera. Sin embargo, al OP le preocupa que lo que él cree que ve no sea lo que Amazon dice que ve. Entonces, en su caso, los datos principales son incorrectos para él. Pero, si midiera el uso de la CPU del núcleo subyacente para depurar problemas de rendimiento, es muy útil ejecutar top. Si solo le preocupa el uso de su instancia, Cloudwatch es el camino a seguir. Entonces, sí, ambos miden cosas diferentes.
Chida
1
Supongo que debería haber seguido mi afirmación con "lo primero es lo que crees que quieres, lo segundo es lo que realmente quieres", pero pensé que ya había sido cubierto.
bahamat
+1 por lo que acabas de decir :)
Chida
1
Recuperé el contenido del enlace muerto de la máquina wayback y lo agregué a la publicación directamente.
Johano Fierra