systemd cgroupsを持つすべてのユーザーにデフォルトのリソース制限を設定します


9

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

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

これをすべてのユーザーに適用する方法はありますか?すべてのユーザープロセスの合計24Gではなく、各ユーザーが24Gを取得するようにしたいと思います(これをuser.slice直接設定した結果だと思います)

回答:


7

公式にサポートされている方法はないようです。(これは正しくありません。下部を参照してください) (cgroupを操作するため公式に推奨されない方法は次のとおりです。

次のファイルを /etc/systemd/system/user@.service.d/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するためのユーザ(ユーザのUIDによって1000置換)は、そのユーザのメモリ制限を課します。私はsystemdに上でそれを検証し237にsystemdでのUbuntu 18.04とDebianのstrecthに237ストレッチ-backportsのからのインストール:

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

不便なのは、ユーザーごとに上記のファイルを作成する必要があることです。systemd 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

しばらくの間、これはまともな回避策のように見えますが、私はより公式のバージョンを差し控えます。
kai

1
@kai私はメモリ制限の公式の方法を見つけ、それらを上記の私の答えに追加しました。お役に立てれば幸いです。
松本龍太郎

1
私はそれをテストしますが、これは私が必要としているものとまったく同じです(そのバグを除いて)
kai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.