Pourquoi top signale-t-il une utilisation du processeur différente de CloudWatch?

9

topmontre une utilisation moyenne du processeur pendant les périodes de pointe d'environ 20% tandis que la surveillance CloudWatch montre une utilisation moyenne du processeur de 40%. Qu'est-ce qui cause cet écart?


la source

Réponses:

15

Une très bonne observation et nous l'avons rencontrée également. Voici ce que j'ai trouvé:

Soyez prudent en mesurant l'utilisation du processeur à partir d'une instance EC2. Il est possible de voir l'utilisation du processeur bien en dessous de 100% - tout en étant complètement optimisé. Croyez-moi: j'ai été là, j'ai fait ça. (Au fait, CloudWatch CPUUtilization est mesuré de l'extérieur de l'instance et est toujours correct.)

Il y a une très bonne description de tout cela ici: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

Dans l'exemple ci-dessus, l'instance m1.small EC2 s'est vu allouer 0,4 unité de processeur et donc 40% de CPU occupé signifie le pourcentage d'utilisation du cœur sous-jacent. Cependant, étant donné que 40% est le partage CPU maximum pouvant être alloué à cette machine virtuelle, l'utilisation CPU effective est de 40% / 40% = 100%. Quel est le nombre affiché par CloudWatch.

Si vous vous demandez d'où vient 40%, le calcul est assez simple. Le système linux m1.small a droit à 1 unité de calcul EC2 qui fournit la capacité CPU équivalente d'un processeur Opteron 2007 à 1,0-1,2 GHz ou Xeon 2007. Étant donné que la machine virtuelle fonctionne sur une machine avec une vitesse d'horloge de 2,6 GHz, elle a droit à une part de processeur de 38,4% à 46,2% sur ce nœud XEN particulier. Vous pouvez exécuter la commande cat / proc / cpuinfo pour découvrir l'architecture du processeur derrière vos instances EC2.

Portez une attention particulière à l'indice sur la façon de gérer les outils qui ne connaissent pas les mathématiques spéciales:

Une autre option qui peut être utilisée pour moderniser les outils de surveillance basés sur un agent ou SNMP existants, qui ne s'intègrent pas à CloudWatch, consiste à utiliser la métrique d'inactivité du processeur. Tout ce que vous avez à faire est de réécrire les règles pour mesurer le CPU inactif au lieu de CPU occupé. Par exemple, si vous avez un seuil> 75% défini pour le CPU occupé, créez une règle <25% pour le CPU inactif. Si le processeur est inactif à 0, votre serveur est lié au processeur.

Très simple. Très agréable.

Lorsque vous exécutez top dans l'instance EC2, il mesure l'utilisation du processeur de la machine principale physique qui exécute votre instance et d'autres. Cette utilisation est incorrecte si vous souhaitez mesurer l'utilisation du processeur de votre instance seule (l'unité de calcul EC2 affectée à votre instance).

C'est pourquoi les métriques cloudwatch sont réelles car elles sont mesurées en dehors de l'instance pour les unités de calcul EC2 affectées à votre instance seule.

Voir ici - https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
la source
En d'autres termes, ils ont tous les deux raison mais mesurent des choses différentes.
bahamat
1
Vous pouvez le dire ainsi. Cependant, le PO craint que ce qu'il pense voir ne soit pas ce qu'Amazon dit qu'il voit. Donc, dans son cas, les meilleures données sont incorrectes pour lui. Mais, si vous souhaitez mesurer l'utilisation du processeur du noyau sous-jacent pour déboguer les problèmes de performances, il est très utile de lancer top. Si vous ne vous souciez que de l'utilisation de votre instance, cloudwatch est la solution. Donc, oui, ils mesurent tous deux des choses différentes.
Chida
1
Je suppose que j'aurais dû suivre ma déclaration avec "le premier est ce que vous pensez que vous voulez, le second est ce que vous voulez vraiment ", mais je pensais que cela avait déjà été couvert.
bahamat
+1 pour ce que vous venez de dire :)
Chida
1
J'ai récupéré le contenu du lien mort de la machine de renvoi et l'ai ajouté directement au message.
Johano Fierra