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