cgroupを使用してユーザーRAMを制限することは機能しません。

cgroupを使用してユーザーRAMを制限することは機能しません。

私はいくつかのチュートリアル/レビュー/ Googleで見つけることができるすべてを介してcgroupの実行を管理することができなかったので参加しました。特定のユーザーが使用できるメモリ量を制限したいです。インターネットには「cgroups」と記載されています。私のテストサーバーはUbuntu 14.04を実行しています。上記のチュートリアルを2つのカテゴリに分けることができます。制限を直接設定して特定の設定を使用するには、echoを使用してください。どちらも私には適していません。

エコーを使って制限を設定する

cgcreate -g cpu,cpuacct,...:/my_group

終了すると、何の通知もありません。私が走ろうとしたとき

echo 100M > memory.limit_in_bytes

sudoを使用しても「許可されていません」としか表示されません。何らかの方法で他のユーザーを制限するポイントまで到達できませんでした。

構成を使用した制限の設定

2つの設定ファイルを読みました。これは私の設定ファイルです。

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

私が走るとき

cgconfigparser -l /etc/cgconfig.conf

systemdにインストールされます。私はtestuserとしてログインしてメモリ集約的なタスクを実行しています。これは私の制限に関係なく実行されます。

再起動しても何も変わりませんでした。カーネル構成に対する奇妙な試みでさえうまくいきませんでした。私は初めてcgroupsに触れ、これがそれほど複雑になるとは思わなかった。私のトピックに関する提案をいただきありがとうございます。よろしくお願いします!

答え1

この現象が発生するのは、ログインセッションにすでに関連付けられているメモリ制限グループがあり、システム構成によってはプロセスがそのメモリ制限グループを継承しているためです。

次のコマンドを使用して、実行中のプロセス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.confmemory削除にカスタムcgroupを使用できますControllers

答え2

同様の問題がありました(しかしFedora 29では):私の質問は/etc/cgconfig.conf完全に無視されたようです。走る

sudo systemctl enable cgconfig

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

関連情報