登録したのは、Google で見つけたいくつかのチュートリアルやコメントなどでは cgroups の実行がうまくいかなかったからです。特定のユーザーが使用できる RAM の量を制限したいのです。インターネットでは「cgroups」と書かれています。私のテストサーバーは Ubuntu 14.04 を実行しています。上記のチュートリアルは 2 つのカテゴリに分けることができます。echo を使用して直接制限を設定する方法と、特定の構成を使用する方法です。どちらもうまくいきません。
エコーを使用した制限の設定
cgcreate -g cpu,cpuacct,...:/my_group
何も通知せずに終了します。実行しようとすると
echo 100M > memory.limit_in_bytes
sudo を使用しても、「許可されていません」と表示されるだけです。他のユーザーを制限するところまで到達しません。
config を使用して制限を設定する
2 つの設定ファイルについて読みました。これが私の設定ファイルです:
config.conf ファイル
mount {
memory = /cgroup/memory;
}
group limit_grp {
memory {
memory.limit_in_bytes=100M;
memory.memsw.limit_in_bytes=125M;
}
}
設定ファイル
testuser memory limit_grp
走るとき
cgconfigparser -l /etc/cgconfig.conf
systemd にマウントされます。今、私は testuser でログオンし、メモリを大量に消費するタスクを実行します - そして、それは制限を気にせずに実行されます。
再起動してみましたが、何も変わりませんでした。カーネル構成を使った奇妙な試みもうまくいきませんでした。私は cgroups を初めて使い、こんなに複雑だとは思っていませんでした。私のトピックに関する提案があれば、ぜひお願いします。よろしくお願いします!
答え1
この動作が発生する理由は、ログイン セッションにすでにメモリ制限グループが関連付けられており、プロセスが systemd 構成に従ってそれを継承しているためと考えられます。
実行中のプロセス cgroup を次のように確認します。
cat /proc/pid/cgroup
...次のような表示が出るかもしれません:
13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/
この動作を望まない場合は、メモリ コントローラーを編集して行から/etc/systemd/logind.conf
削除したカスタム cgroup を使用できます。memory
Controllers
答え2
私も同様の問題を抱えていました(Fedora 29で)。どうやら私のは/etc/cgconfig.conf
完全に無視されていたようです。
sudo systemctl enable cgconfig
再起動すると問題は解決しました。