デーモンを再ロードすると、cgroupのcgroup.subtree_controlがリセットされます。

デーモンを再ロードすると、cgroupのcgroup.subtree_controlがリセットされます。

mycgroupusingという名前の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がどこでも明示的に有効になっていない場合(そしてDefaultCPUAccountingがsystem.confに設定されていない場合)、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

関連情報