守护进程重新加载会重置 cgroup 的 cgroup.subtree_control

守护进程重新加载会重置 cgroup 的 cgroup.subtree_control

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

弄清楚了。

引用自systemd 的 cgroups 配置在哪里?

正如我所读到的,如果没有单位为 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

相关内容