mycgroup
我创建了一个名为using 的cgroup mkdir /sys/fs/cgroup/mycgroup
。
执行之前echo +cpu > /sys/fs/cgroup/cgroup.subtree_control
:
[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
cat: /sys/fs/cgroup/mycgroup/cpu.max: No such file or directory
执行后echo +cpu > /sys/fs/cgroup/cgroup.subtree_control
:
[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
max 100000
但执行后systemctl daemon-reload
:
[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
cat: /sys/fs/cgroup/mycgroup/cpu.max: No such file or directory
守护程序重新加载正在重置cgroup.subtree_control
文件。如何使设置永久生效,以便守护程序重新加载不会从文件中删除 cpu?
答案1
弄清楚了。
正如我所读到的,如果没有单位为 CPUShares 设置了值,并且 CPUAccounting 没有在任何地方显式启用(并且没有在 system.conf 中设置 DefaultCPUAccounting),那么 systemd 可能根本不会(不会?)使用 cpu 层次结构。
这基本上是正确的。简单地将线插入DefaultCPUAccounting=yes
对/etc/systemd/system.conf
我来说没有任何影响。
要点:如果没有服务单元文件需要 CPU 控制器,则 systemd 似乎不会打开它。
所以我测试了它。我重新启动进入新的 Debian 12 系统。
cat /sys/fs/cgroup/cgroup.subtree_control
memory pids
我将其添加到以下[Service]
部分/usr/lib/systemd/system/nginx.service
:
# https://unix.stackexchange.com/a/495013/237874
# https://unix.stackexchange.com/questions/494843/how-to-limit-a-systemd-service-to-play-nice-with-the-cpu/495013#495013
CPUQuota=75%
然后...
systemctl daemon-reload
cat /sys/fs/cgroup/cgroup.subtree_control
cpu memory pids
即使重新启动后,subtree_control 仍然列出 cpu!
编辑:CPUQuota=75%
在/usr/lib/systemd/system/nginx.service
文件中产生以下内容:
cat /sys/fs/cgroup/system.slice/nginx.service/cpu.max
75000 100000