使用 cgroups 限制用户 ram 不起作用(对我来说)

使用 cgroups 限制用户 ram 不起作用(对我来说)

我注册是因为我无法通过一些教程/评论/您在谷歌上找到的任何内容来管理运行cgroup。我想限制特定用户可以使用的内存量。互联网上说“cgroups”。我的测试服务器运行的是 Ubuntu 14.04。您可以将提到的教程分为两类。使用 echo 直接设置限制并使用特定配置。两者都不适合我。

使用 echo 设置限制

cgcreate -g cpu,cpuacct,...:/my_group

结束时没有任何通知。当我尝试跑步时

echo 100M > memory.limit_in_bytes

即使使用 sudo 时它也只是说“不允许”。我什至没有达到任何限制其他用户的程度。

使用配置设置限制

我读到了两个配置文件。这是我的配置文件:

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

当我跑步时

cgconfigparser -l /etc/cgconfig.conf

它安装到 systemd。现在我用 testuser 登录,运行一个内存密集型任务 - 它运行时不关心我的限制。

我尝试重新启动,没有任何改变。即使使用内核配置的一些奇怪的尝试也不起作用。我是 cgroups 的新手,没想到它会这么复杂。如果对我的主题有任何建议,我将不胜感激。先感谢您!

答案1

您看到此行为的原因可能是由于您的登录会话已经关联了一个内存限制组,并且根据 systemd 配置,该进程正在继承该内存限制组。

使用以下命令检查正在运行的进程 cgroup:

cat /proc/pid/cgroup

...你可能会看到类似的内容:

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

假设您不希望出现这种行为,您可以使用自定义 cgroup 来进行内存控制器编辑/etc/systemd/logind.confmemoryControllers行中删除。

答案2

我也遇到了类似的问题(不过在 Fedora 29 上):似乎我的问题/etc/cgconfig.conf完全被忽略了。跑步

sudo systemctl enable cgconfig

并重新启动解决了问题。

相关内容