Почему top сообщает о другом использовании процессора, чем CloudWatch?

9

topпоказывает среднее использование процессора во время пиковых нагрузок около 20%, в то время как мониторинг CloudWatch показывает среднее использование процессора на 40%. Что вызывает это несоответствие?


источник

Ответы:

15

Очень хорошее наблюдение, и мы столкнулись с этим. Вот что я нашел:

Будьте внимательны при измерении загрузки процессора из экземпляра EC2. Можно увидеть использование ЦП значительно ниже 100% - и при этом быть полностью израсходованным. Поверь мне: был там, сделал это. (Кстати, CloudWatch CPUUtilization измеряется снаружи экземпляра и всегда корректен.)

Здесь очень хорошее описание всего этого: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

В приведенном выше примере экземпляру m1.small EC2 было выделено 0,4 процессорных блока, поэтому 40% загрузки ЦП означает процент использования базового ядра. Однако, поскольку 40% - это максимальная доля ЦП, которая может быть выделена этой виртуальной машине, эффективное использование ЦП составляет 40% / 40% = 100%. Какой номер отображается в CloudWatch.

Если вам интересно, откуда 40%, математика довольно проста. Система m1.small linux имеет право на 1 вычислительный блок EC2, который обеспечивает эквивалентную производительность процессора процессора Opteron 2007–1000 или Xeon 2007-1,0 ГГц. Поскольку виртуальная машина работает на машине с тактовой частотой 2,6 ГГц, она имеет право на долю процессора 38,4% - 46,2% на этом конкретном узле XEN. Вы можете запустить команду cat / proc / cpuinfo, чтобы выяснить архитектуру процессора за вашими экземплярами EC2.

Обратите особое внимание на подсказку о том, как обращаться с инструментами, которые не знают о специальной математике:

Другой вариант, который можно использовать для модернизации существующих средств мониторинга на основе агентов или SNMP, которые не интегрируются с CloudWatch, - это использовать показатель простоя ЦП. Все, что вам нужно сделать, это переписать правила для измерения простоя процессора вместо загрузки процессора. Например, если для занятого процессора установлено пороговое значение> 75%, создайте правило <25% для простоя процессора. Если процессор простаивает 0, то ваш сервер привязан к процессору.

Очень просто. Очень хорошо.

Когда вы запускаете top в экземпляре EC2, он измеряет загрузку ЦП компьютера физического ядра, на котором запущен ваш экземпляр, и других. Это использование некорректно, если вы хотите измерять использование процессора только вашим экземпляром (вычислительная единица EC2, назначенная вашему экземпляру).

Вот почему метрики cloudwatch являются реальными, поскольку они измеряются вне экземпляра для вычислительных единиц EC2, назначенных только вашему экземпляру.

Смотрите здесь - https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
источник
Другими словами, они оба правы, но измеряют разные вещи.
Багамат
1
Вы могли бы выразить это так. Однако ОП обеспокоен тем, что, по его мнению, он видит не то, что говорит амазонка, которую он видит. Так что, в его случае, топ-данные для него неверны. Но, если вы хотите измерить использование процессора базовым ядром для устранения проблем с производительностью, очень полезно запустить top. Если вы беспокоитесь только об использовании своего экземпляра, то лучше всего использовать cloudwatch. Так что, да, они оба измеряют разные вещи.
Чида
1
Полагаю, мне следовало бы последовать моему заявлению: «первое - это то, что вы хотите, второе - то, что вы действительно хотите», но я подумал, что это уже освещено.
Багамат
+1 за то, что вы только что сказали :)
Чида
1
Я извлек содержимое мертвой ссылки с машины обратного хода и добавил ее к сообщению напрямую.
Johano Fierra