top
показывает среднюю загрузку ЦП в часы пик около 20%, в то время как мониторинг CloudWatch показывает среднюю загрузку ЦП 40%. Что вызывает это несоответствие?
Очень хорошее наблюдение, и мы тоже с этим столкнулись. Вот что я нашел:
Будьте осторожны, измеряя использование ЦП из экземпляра 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, который обеспечивает мощность ЦП, эквивалентную производительности процессора 1,0–1,2 ГГц 2007 Opteron или 2007 Xeon. Поскольку виртуальная машина работает на машине с тактовой частотой 2,6 ГГц, она имеет право на долю процессора в этом конкретном узле XEN от 38,4% до 46,2%. Вы можете запустить команду cat / proc / cpuinfo, чтобы узнать архитектуру ЦП, стоящую за вашими экземплярами EC2.
Обратите особое внимание на подсказку о том, как обращаться с инструментами, которые не знают специальной математики:
Другой вариант, который можно использовать для модернизации существующих средств мониторинга на основе агента или SNMP, которые не интегрируются с CloudWatch, - это использовать метрику простоя ЦП. Все, что вам нужно сделать, это переписать правила для измерения простоя ЦП, а не загрузки ЦП. Например. если у вас установлен порог> 75% для загрузки ЦП, создайте правило <25% для простоя ЦП. Если CPU idle равен 0, значит, ваш сервер привязан к CPU.
Очень просто. Очень хорошо.
Когда вы запускаете верхний уровень в экземпляре EC2, он измеряет использование ЦП физической базовой машины, на которой запущен ваш экземпляр и другие. Это использование неверно, если вы хотите измерять использование ЦП только для вашего экземпляра (вычислительная единица EC2, назначенная вашему экземпляру).
Вот почему метрики cloudwatch реальны, поскольку они измеряются внешними по отношению к экземпляру для вычислительных единиц EC2, назначенных только вашему экземпляру.
Посмотреть здесь -- https://forums.aws.amazon.com/thread.jspa?threadID=99993