Warum meldet top eine andere CPU-Auslastung als CloudWatch?

9

topzeigt eine durchschnittliche CPU-Auslastung in Spitzenzeiten von etwa 20%, während die CloudWatch-Überwachung eine durchschnittliche CPU-Auslastung von 40% anzeigt. Was verursacht diese Diskrepanz?


quelle

Antworten:

14

Eine sehr gute Beobachtung, auf die wir auch gestoßen sind. Folgendes habe ich gefunden:

Messen Sie die CPU-Auslastung innerhalb einer EC2-Instanz sorgfältig. Es ist möglich, dass die CPU-Auslastung deutlich unter 100% liegt - und dennoch vollständig ausgeschöpft wird. Vertrau mir: war dort, habe das getan. (CloudWatch CPUUtilization wird übrigens von außerhalb der Instanz gemessen und ist immer korrekt.)

Hier finden Sie eine sehr gute Beschreibung des Ganzen: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

Im obigen Beispiel wurden der m1.small EC2-Instanz 0,4 Prozessoreinheiten zugewiesen, sodass 40% CPU-Auslastung die prozentuale Auslastung des zugrunde liegenden Kerns bedeutet. Da jedoch 40% der maximale CPU-Anteil ist, der dieser VM zugewiesen werden kann, beträgt die effektive CPU-Auslastung 40% / 40% = 100%. Welches ist die Nummer, die von CloudWatch angezeigt wird.

Wenn Sie sich fragen, woher 40% kommen, ist die Mathematik ziemlich einfach. Das m1.small-Linux-System hat Anspruch auf 1 EC2-Recheneinheit, die die entsprechende CPU-Kapazität eines 2007 Opteron- oder 2007 Xeon-Prozessors mit 1,0–1,2 GHz bietet. Da die VM auf einem Computer mit einer Taktrate von 2,6 GHz ausgeführt wird, hat sie Anspruch auf einen Prozessoranteil von 38,4% bis 46,2% auf diesem bestimmten XEN-Knoten. Sie können den Befehl cat / proc / cpuinfo ausführen, um die CPU-Architektur hinter Ihren EC2-Instanzen herauszufinden.

Achten Sie besonders auf den Hinweis zum Umgang mit Werkzeugen, die nichts über die spezielle Mathematik wissen:

Eine weitere Option, mit der die vorhandenen agenten- oder SNMP-basierten Überwachungstools nachgerüstet werden können, die nicht in CloudWatch integriert sind, ist die Verwendung der CPU-Leerlaufmetrik. Alles, was Sie tun müssen, ist, die Regeln neu zu schreiben, um den CPU-Leerlauf zu messen, anstatt die CPU zu belegen. Wenn Sie beispielsweise einen Schwellenwert von> 75% für ausgelastete CPU definiert haben, erstellen Sie eine Regel von <25% für den CPU-Leerlauf. Wenn der CPU-Leerlauf 0 ist, ist Ihr Server CPU-gebunden.

Sehr einfach. Sehr schön.

Wenn Sie innerhalb der EC2-Instanz top ausführen, wird die CPU-Auslastung des physischen Kerncomputers gemessen, auf dem Ihre Instanz und andere ausgeführt werden. Diese Verwendung ist falsch, wenn Sie nur die CPU-Auslastung Ihrer Instanz messen möchten (die Ihrer Instanz zugewiesene EC2-Recheneinheit).

Aus diesem Grund sind Cloudwatch-Metriken real, da sie außerhalb der Instanz für die EC2-Recheneinheit (en) gemessen werden, die nur Ihrer Instanz zugewiesen sind.

Siehe hier - https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
quelle
Mit anderen Worten, beide haben Recht, messen aber verschiedene Dinge.
Bahamat
1
Man könnte es so sagen. Das OP ist jedoch besorgt darüber, dass das, was er zu sehen glaubt, nicht das ist, was Amazon sagt, dass er sieht. In seinem Fall sind die Top-Daten für ihn also falsch. Wenn Sie jedoch die CPU-Auslastung des zugrunde liegenden Kerns messen möchten, um Leistungsprobleme zu beheben, ist es sehr nützlich, top auszuführen. Wenn Sie nur über die Verwendung Ihrer Instanz besorgt sind, ist Cloudwatch der richtige Weg. Also, ja, beide messen verschiedene Dinge.
Chida
1
Ich denke, ich hätte meiner Aussage folgen sollen: "Ersteres ist das, was Sie zu wollen glauben , letzteres ist das, was Sie wirklich wollen", aber ich dachte, das wurde bereits behandelt.
Bahamat
+1 für das, was du gerade gesagt hast :)
Chida
1
Ich habe den Inhalt des toten Links von der Wayback-Maschine abgerufen und ihn direkt zum Beitrag hinzugefügt.
Johano Fierra