游牧者如何限制任务的资源消耗?如果组中有两个任务各自具有cpu = 100
,那么是否存在两个任务都可以访问的200
共享池?如果其中一项任务希望访问更多的CPU滴答声,将会发生什么事?
job "docs" {
group "example" {
task "server" {
resources {
cpu = 100
memory = 256
}
}
task "greeter" {
resources {
cpu = 100
memory = 256
}
}
}
}
看着/client/allocation/:alloc_id/stats
,我看到resources
和tasks
的ThrottledPeriods,ThrottledTicks都分解了–资源和任务都会限制资源的使用吗?
答案 0 :(得分:0)
这不能完全回答问题,但是docker driver docs包含有关其部分工作原理的一些详细信息:
CPU
Nomad基于CPU份额限制容器的CPU。 CPU份额允许容器超过其CPU限制。仅在存在资源争用时才施加CPU限制。当主机处于负载状态时,您的进程可能会受到限制,以稳定QoS,具体取决于其拥有的份额。通过阅读NOMAD_CPU_LIMIT,可以查看有多少CPU共享可供您的进程使用。 1000份额大约等于1 GHz。
在Nomad上加载测试工作负载时,请记住CPU份额的含义。
内存
Nomad基于总虚拟内存限制容器的内存使用量。这意味着Nomad计划的容器不能使用swap。这是为了确保交换进程不会降低同一主机上其他工作负载的性能。
由于内存不是一种弹性资源,因此您需要确保容器不超过为其分配的内存量,否则在尝试进行malloc分配时它将被终止或崩溃。进程可以通过读取NOMAD_MEMORY_LIMIT来检查其内存限制,但需要跟踪其自身的内存使用情况。内存限制以兆字节表示,因此1024 = 1 GB。