【问题标题】:How to measure the CPU utilization of Each container in Mesos?如何测量 Mesos 中每个容器的 CPU 利用率?
【发布时间】:2023-03-05 13:55:01
【问题描述】:

我有许多应用程序在 Mesos 的容器上运行,通过马拉松管理。在通过 1、.5 等马拉松进行部署时,我已经为每个应用程序分配了 CPU。 但是marathon中的CPU分配,并不代表它的1个CPU或者半个CPU。它只是意味着它的分时比率。此外,每个容器都可以访问其主机上的所有 CPU。

现在,我想测量 Mesos slave 上每个 Container 的 CPU 效率,以便我可以减少或增加 Marathon 中每个 App 的 CPU 分配。我只是想让资源利用效率更高。

我可以使用https://github.com/bobrik/collectd-mesos-tasks,但问题是 CPU 利用率指标与 Marathon 中的 CPU 分配无关。

【问题讨论】:

  • 有关通用计算硬件和软件的问题对于 Stack Overflow 来说是题外话,除非它们直接涉及主要用于编程的工具。您或许能够获得有关超级用户的帮助。
  • 这个问题非常适合 SO。这是关于从 Mesos/Marathon 中获取性能数据,这与开发人员和管理员一样重要。
  • 谢谢@micheal

标签: containers monitoring cpu-usage mesos marathon


【解决方案1】:

在 Mesos WebUI 中,您可以查看执行程序使用了多少 CPU

Here 是从/monitor/statistics 端点收集统计信息并计算 CPU 使用率的代码。

您对cpus_total_usage 感兴趣,因此以下方法应该适合您

假设ab 是某个时间点的统计数据快照。要计算cpus_total_usage,我们需要计算executor在系统和用户空间中花费的时间,然后除以ab之间经过的时间。

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%

【讨论】:

  • cpus_total_usage 本身给了我们百分比,不是吗?在这种情况下,我不明白 cpu_limit 是什么。不错的主意。谢谢
  • 是和否 :) cpus_total_usage 可以解释为一个 CPU 的百分比更像是负载。对于多个 CPU,它将大于 1,这就是为什么我将它除以 cpu_limit 以获得分配资源的百分比,并且由于浮点数学错误和启用的软限制(默认情况下 CFS已禁用)
【解决方案2】:

根据您希望自己投入多少工作,您可以使用 Marathon Event Bus 和更普遍的 Marathon HTTP API(例如 this endpoint)以及 cAdvisor 或 @987654324 等低级工具@自己做数学。如果您不想自己编写代码,我建议您使用SysdigDatadogPrometheus 为您完成繁重的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多