我正在使用 CentOS 7,系统中注册了多个用户(UID:1000、1001、1002 等)
我想使用 cgroup 和 systemd 限制每个用户的内存消耗。
以下命令运行良好,但必须使用 UID=1000 的用户登录。
systemctl set-property user-1000.slice MemoryLimit=3000M
systemctl daemon-reload
如果用户未登录,我会收到以下错误消息
Failed to set unit properties on user-1000.slice: Unit user-1000.slice is not loaded.
假设我有 20 个用户,我想为他们设置内存限制。我应该手动登录还是编写一些变通脚本来执行此操作以便systemctl set-property
为每个用户运行命令?或者存在一些优雅而直接的解决方案?
答案1
这里有一个类似的问题的答案:https://unix.stackexchange.com/questions/34334/how-to-create-a-user-with-limited-ram-usage
ulimit
和施加的限制limits.conf
是针对每个流程的。我对这一点确实不太清楚。如果您想要限制用户使用的内存总量(这是您要求的)。您需要使用 cgroups。
在
/etc/cgconfig.conf
:group memlimit { memory { memory.limit_in_bytes = 4294967296; } }
这将创建一个
cgroup
最大内存限制为 4GiB 的。在
/etc/cgrules.conf
:luser memory memlimit/
这将导致运行的所有进程在创建的 cgroup
luser
内运行。memlimit
cgconfig.conf