我使用的是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
命令?或者存在一些优雅而直接的解决方案?
答案 0 :(得分:3)
这个问题基于配置方式,并不意味着cgroup不能限制非登录用户。
systemctl set-property ...
命令仅支持运行时的资源设置控制。
Failed to set unit properties on user-1000.slice: Unit user-1000.slice is not loaded.
只是运行时问题。您可以使用静态方式解决问题。
例>
# vim /etc/systemd/system/user-1000.slice
创建特定的用户切片文件或切片。
[Unit]
Description=1000 user.slice
[Slice]
MemoryAccounting=true
MemoryLimit=3000M
重新加载systemd。
# systemctl daemon-reload
检查cgroup资源控制设置。
1.登录为id = 1000用户。 (如果用户1000登录,则动态应用cgroup设置)
2.检查cgroup限制状态
# cd /sys/fs/cgroup/memory/user.slice/
# ls -ld *.slice
...snip...
user-1000.slice
...snip...
# cd ./user-1000.slice
# cat ./memory.limit_in_bytes
3145728000
我希望这会对你有所帮助。