lov*_*ing 7 kernel ulimit docker
我知道这两种机制(我们称它们为 A 和 B)会限制进程的资源。
想知道两人的合作。
如果 A 限制了一个进程的资源,那么当 B 也限制了相同的资源时会发生什么?
小智 6
所述ulimit
外壳命令(可执行程序)是围绕所述的包装setrlimit
系统调用(内核提供的功能),以及其中包含的限制信息被称为底层数据结构rlimit
。
ulimit
shell命令控制在可供资源的软,硬限制外壳和由它启动的进程。
getrlimit()
和setrlimit()
系统调用分别获取和设置资源限制,其中相关的软限制和硬限制由rlimit
结构定义。
有关更多信息,请使用:man 1 ulimit
和man 2 setrlimit
Cgroups(控制组)允许您在系统上运行的用户定义的任务(进程)组之间分配资源——例如 CPU 时间、系统内存、网络带宽或这些资源的组合。
DM ulimit
与每个进程的设置或与节流速度相关的任何内容无关。这就是cgroups
内核扩展的功能和用途。提到它提供的其他功能之一,我们可以说它甚至可以定义设置的层次结构。
注意,我建议您阅读本文以快速了解ulimit
/ setrlimit
。而对于cgroups
(Control Groups),我建议你阅读RedHat 官方文档。
所有限制独立适用。当进程发出需要超过某个限制的请求时,该请求将被拒绝。这适用于 cgroup、每个进程还是每个用户的限制。
由于 cgroup 为每个进程组设置限制,而 setrlimit 为每个用户或每个进程设置限制,因此这些机制通常不是多余的。给定的请求可能会超出 cgroup 和 setrlimit 限制,或仅超出其中之一。
请记住,所有限制都是允许的最大值,而不是保证的最小值。例如,如果每个进程的内存限制为 1GB,如果系统中没有更多可用内存,则具有 200MB 内存的进程可能仍会拒绝其分配 100MB 的请求,无论任何适用的限制如何。如果 setrlimit 和 cgroup 限制都适用,那么至少可以超过三个最大值:setrlimit 最大值、cgroup 最大值和当前可用资源最大值。