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がどこでも明示的に有効になっていない場合(そして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