以用户身份使用 cgroups 设置用户创建的 systemd 范围的 MemoryLimit

以用户身份使用 cgroups 设置用户创建的 systemd 范围的 MemoryLimit

有关的:限制子进程的总体内存使用量

有没有办法让非特权用户或 root 允许非特权用户创建 systemd 范围(或 systemd 管理的其他控制组),以便该范围的内存使用量受到限制并且该限制可由用户设置?

或者说,为什么这样达不到上面描述的效果:

$ systemd-run --scope --user --unit=limit-test.scope bash
Running as unit limit-test.scope.
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=no
MemoryLimit=18446744073709551615
$ systemctl set-property --user limit-test.scope MemoryAccounting=yes
$ systemctl set-property --user limit-test.scope MemoryLimit=100M
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=yes
MemoryLimit=104857600
$ python
>>> a = [1]*1000000000    # happily eats 7.4G of RAM

我正在使用 systemd 215 在不稳定的 Debian 上测试这个。内核是 3.18.2 并且使用所需的支持进行编译,我相信:

$ zgrep -E 'CGROUP|MEMCG' /proc/config.gz 
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_MEMCG_KMEM=y
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y

/etc/systemd.system.conf 设置这些参数,但没有设置其他参数:

DefaultCPUAccounting=yes
DefaultBlockIOAccounting=yes
DefaultMemoryAccounting=yes

我真正想要实现的是一种以非特权用户身份对进程(或一组进程)进行 RSS 限制的方法,但不限制虚拟内存,即 ulimit -v 出局。

答案1

好的,正确答案是无法为用户进程设置 cgroup 限制(无论如何,在写这个答案的时候)。

参考自 systemd-devel 邮件列表

我们现在根本不支持这种做法。非特权用户目前无法访问各种控制器的 cgroup 属性,因为这不安全。

有一天我们可以一点一点地开放它,但这需要一些内核工作,并且需要 Tejun 的确认,以确保这是安全的。

这是 2015 年 4 月,我认为从那以后什么都没有改变。

答案2

如果这样做的话似乎可行:

$ systemd-run --scope --user --unit limit-test.scope -p MemoryAccounting=yes -p MemoryLimit='10M' bash

然后检查状态:

$ systemctl show --user limit-test.scope | grep Mem
MemoryCurrent=18446744073709551615
MemoryAccounting=yes
MemoryLimit=10485760

关键是要将带有-p标志的属性传入。另请注意,对于用户模式 ​​systemd,配置默认值的相关文件实际上是/etc/systemd/user.conf,而不是/etc/systemd/system.conf

相关内容