systemd cgroupを使用してすべてのユーザーのデフォルトリソース制限を設定する

systemd cgroupを使用してすべてのユーザーのデフォルトリソース制限を設定する

次のようにユーザーのメモリ制限を設定できます。

systemctl set-property user-UID.slice MemoryHigh=24G

すべてのユーザーに適用する方法はありますか?すべてのユーザープロセスに対して、合計24Gではなく、各ユーザーに24Gを取得させたいと思います(user.slice自分で設定した結果だと思いました)。

答え1

正式にサポートされる方法はないようです。(間違っています。下を参照) cgroupを操作するため、正式に推奨されない1つの方法は次のとおりです。

次のファイルを次に設定します。/etc/systemd/system/[email protected]/set-memhigh.conf

[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i

次に、「/root/set-memoryhigh.sh」で次のファイルを作成します。

#!/bin/bash
exec >>/var/tmp/log.txt 2>&1 # for logging
set -x # for logging 
for d in /sys/fs/cgroup /sys/fs/cgroup/user.slice /sys/fs/cgroup/user.slice/user-$1.slice; do
  echo "+memory" >>${d}/cgroup.subtree_control
done
/bin/echo "24G" >> /sys/fs/cgroup/user.slice/user-$1.slice/memory.high

実行すると、動作していることを確認できます。

cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high

"/sys/fs/cgroup/user.slice" が存在しない場合、統合 cgroup 階層はアクティブになりません。私たちはそれを次のようにアクティブにする必要がありますhttps://unix.stackexchange.com/a/452728/297666

働いている間、これが好きかどうかはわかりません...

7月25日に追加されたメモ:次の/etc/systemd/system/user-1000.sliceファイルを作成してくださいuser(1000をユーザーのUIDに置き換えます)はこのユーザーにメモリ制限を課します。 systemdで確認しました第237話Ubuntu 18.04およびDebian strecthでsystemdを使用する第237話ストレッチバックポートからのインストール:

[Slice]
Slice=user.slice
MemoryHigh=24G

不便な点は、上記のファイルを次のように作成する必要があることです。ユーザー。システムとして239、上記のファイルを次のように作成し、/etc/systemd/system/user-.slice.d/memory.conf各ユーザーにメモリ制限を適用できます。しかし、systemd 239にバグがあります。 (このバグは240で修正されました。)そして期待どおりに動作しません。エラーを解決するには、次のファイルを作成してuser-0.slice実行しますsystemctl enable user-0.sliceいいえ各ユーザーごとに次のファイルを作成する必要があります。

[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target

関連情報