我正在使用一些有32个核心的服务器(包括超线程)。但是,当我查看节点框架的详细信息时,我发现有几个报告超过32个已分配的CPU。那是为什么?
编辑1:
查看其中一个节点,/ proc / cpuinfo列出了正确的CPU数量。在这个节点上注册的唯一框架是Marathon,在那里我看到了CPU的分配(通过Mesos UI)。 Mesos报告我有32个CPU。
答案 0 :(得分:1)
作为code comment says,实际上系统可以拥有更多分配的CPU。框架接受需要适应资源约束的提议,但随后奴隶为执行者添加一些非零资源。 MEM也是如此。
// Default cpu resource given to a command executor.
constexpr double DEFAULT_EXECUTOR_CPUS = 0.1;
// Default memory resource given to a command executor.
constexpr Bytes DEFAULT_EXECUTOR_MEM = Megabytes(32);
...
// Add an allowance for the command executor. This does lead to a
// small overcommit of resources.
// TODO(vinod): If a task is using revocable resources, mark the
// corresponding executor resource (e.g., cpus) to be also
// revocable. Currently, it is OK because the containerizer is
// given task + executor resources on task launch resulting in
// the container being correctly marked as revocable.
executor.mutable_resources()->MergeFrom(
Resources::parse(
"cpus:" + stringify(DEFAULT_EXECUTOR_CPUS) + ";" +
"mem:" + stringify(DEFAULT_EXECUTOR_MEM.megabytes())).get());
WebUI显示从master/metrics
端点获取的值,并且从Executor计算的值不仅仅是任务。