CentOS 7中的CGroup配置

时间:2017-11-18 15:43:10

标签: centos7 systemd cgroups

我使用的是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 个答案:

答案 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

我希望这会对你有所帮助。