2016-10-31 2 views
1

У меня есть много приложений, работающих на контейнерах в Мезосе, управляемых через марафон. Я дал распределение ЦП для каждого приложения при развертывании через марафон, например 1, .5 и т. Д. Но распределение ЦП в марафоне не означает, что его 1 процессор или половина процессора. Это просто означает, что его коэффициент разделения времени. Также каждый контейнер получает доступ ко всем ЦП на своем хосте.Как измерить использование ЦП каждого контейнера в Мезосе?

Теперь я хочу измерить эффективность процессора каждого контейнера на ведомых устройствах Mesos, чтобы я мог уменьшить или увеличить распределение CPU для каждого приложения в марафоне. Я просто хочу сделать использование ресурсов еще более эффективным.

Я мог бы использовать https://github.com/bobrik/collectd-mesos-tasks, но проблема в показателях использования процессора не связана с распределением CPU в марафоне.

+0

Вопросы об общем вычислительном оборудовании и программном обеспечении не относятся к теме для переполнения стека, если только они не связаны напрямую с инструментами, используемыми в основном для программирования. Вы можете получить помощь в Super User. –

+2

Вопрос подходит для SO. Речь идет о получении перфектных данных от Mesos/Marathon, что так же важно для разработчиков, как и для админов. –

+0

Спасибо @micheal – Balu

ответ

2

В зависимости от того, сколько работы вы хотите инвестировать себя, вы можете использовать либо Marathon Event Bus и в более общем Marathon HTTP API (например this endpoint) наряду с инструментами низкого уровня, как cAdvisor или cinf сделать математику самостоятельно. Если вы не хотите сами вводить код, я предлагаю вам использовать Sysdig, Datadog или Prometheus, чтобы сделать тяжелый подъем для вас.

2

В Mesos WebUI вы можете видеть, сколько CPU используется вашим исполнителем

Here код, который собирает статистику из /monitor/statistics конечной точки и рассчитать нагрузку на процессор.

Вы заинтересованы в cpus_total_usage поэтому следующий метод будет работать и для вас

Пусть предположим a и b являются снимок статистики в какой-то момент времени. Чтобы вычислить cpus_total_usage, нам нужно вычислить время, которое исполнитель потратил на системное и пользовательское пространство, и погрузил его по времени между a и b.

cpus_total_usage = (
        (b.cpus_system_time_secs - a.cpus_system_time_secs) + 
        (b.cpus_user_time_secs - a.cpus_user_time_secs))/
        (b.timestamp - a.timestamp) 
        ) 
cpu_percent  = cpus_total_usage/cpu_limit * 100% 
+0

cpus_total_usage сам дает нам процент, не так ли? Я не понял, что такое cpu_limit в этом контексте. Хорошая идея. Спасибо – Balu

+0

Да и нет :) 'cpus_total_usage' можно интерпретировать, так как процент одного процессора больше похож на нагрузку. Это будет более 1 для более чем одного процессора, поэтому я разделил его на 'cpu_limit', чтобы получить процент выделенных ресурсов, и снова это значение может быть больше 100%, потому что математическая ошибка с плавающей запятой и допустимые пределы (по умолчанию CFS выключен) – janisz

Смежные вопросы