cgroups でユーザーの RAM を制限すると機能しない (私の場合)

cgroups でユーザーの RAM を制限すると機能しない (私の場合)

登録したのは、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 を使用できます。memoryControllers

答え2

私も同様の問題を抱えていました(Fedora 29で)。どうやら私のは/etc/cgconfig.conf完全に無視されていたようです。

sudo systemctl enable cgconfig

再起動すると問題は解決しました。

関連情報