CGroups 内存子系统

CGroups 内存子系统

我想知道是否可以在 cgroup 中为内存子系统设置动态限制。目前,我已禁用 OOM 并使用虚拟进程来测试控制组,当达到内存限制时,进程会冻结(如预期),但当我尝试设置更大的限制(例如 2 倍内存)时,命令echo会失败并且进程保持冻结状态。

如何在 cgroup 中设置动态内存使用限制,而无需将进程移动到另一个设置了新限制的 cgroup?

答案1

当您提到使用 cgroups 的“动态限制”时,您需要更具体一点地说明您要查找的内容。最好提供一个示例,说明您的应用程序和 cgroup 以及 cgconfig.conf 的作用。这将给我们更好的了解。

尽管 cgroups 允许在 cgconfig.conf 中限制进程使用一定量的内存memory.limit_in_bytes,但它仅设置上限,并且不会抱怨进程使用的下限。因此,我不确定在这种情况下您是否需要 cgroups。

因此,如果您的程序动态分配内存,您可能还需要检查有多少内存被过度使用。使用sysctl -a | grep overcommit并更改内核可调参数以始终过度使用内存,无论是否有可用内存。

答案2

好吧,经过一番研究,我发现当 cgroup 上有任务时,其中的一些参数无法修改。

遗憾的是,内存限制参数就是其中之一。

我认为我的最后一个选择是使用任务迁移功能并根据需要创建具有新内存限制的 cgroup。

相关内容