cgroup を使用した virtualbox メモリ使用量の制限

cgroup を使用した virtualbox メモリ使用量の制限

(コントロールグループ)を使用してvirtualboxのメモリ使用量を制限しようとしてもcgroup機能しないようです。

私のコンピュータは次のとおりです

$ uname -a
Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux

私は次のように動作しようとしています:

  1. メモリ階層の下に新しいcgroupを作成します。

    $ cgcreate -g memory:vbox
    
  2. vbox に memory.limit_in_bytes を設定します。

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. pidを実行しているvboxをvboxにグループ化します。

    $ cgclassify -g memory:vbox 20015
    

誰かがこれがうまくいかない理由を説明できますか?

答え1

次のように、ファイルに/etc/security/limits.confを使用してメモリ使用量を制限できます。

domain type item value

はどんな状況でも超過できない制限domainです。@groupnametypehardsofthard

itemプロジェクトフィールドは、制限されたプロジェクトタイプを指定します。たとえば、core(コアファイルのサイズ)、data(プログラムデータ領域のサイズ)、fsize(ユーザーが作成したファイルのサイズ)、nofile(開いているデータファイルの数)、rss(常駐セットサイズ)、stack(stack) size)、cpu(単一プロセスのCPU時間(分))、nproc(同時プロセス数)、maxlogins(同時ログイン数)、およびPriority(プロセス優先順位)。データ、RSS、およびスタック項目はすべて、プログラムによって消費されるメモリに関連しています。これらのデータ容量と他のデータ容量の測定単位はキロバイトです。

選択したフィールドvalueに関連してitem、たとえばcpuフィールドをitem選択して入力する2と(VirtualBoxグループ)、CPU時間よりも時間がかかるとvalue終了します。domain2

それも使用できますが、ulimitbashシェルに制限されています。

要求どおりに完了しませんでしたが、これがあなたの目標を達成するのに役立つことを願っています。

答え2

ファイルに問題があると思います/etc/cgconfig.conf。この設定は私に適しています。

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

[root@localhost cgroup]# service cgconfig start
Starting cgconfig service:                                 [  OK  ]
[root@localhost cgroup]# ls
memory
[root@localhost cgroup]# ls memory/
cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           release_agent
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes       tasks
[root@localhost cgroup]# cgcreate -g memory:vbox
[root@localhost cgroup]# cgset -r memory.limit_in_bytes=512M vbox
[root@localhost cgroup]# cgclassify -g memory:vbox 11727
[root@localhost cgroup]# cat memory/vbox/tasks 
11727

ただしcgreate、コマンドを使用する代わりに、これらの設定を含むファイルを作成して再起動するたびにプロセスを繰り返す必要がないようにすることをお勧めします。あなたの場合、ファイルは次のようになります。cgset/etc/cgconfig.conf

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

group vbox {
    memory {
        memory.limit_in_bytes="536870912";
    }
}

これで、サービスが開始されるたびに vbox cgroup が準備されます。ファイルの数を使用または使用して、cgconfigvirtualboxのPIDをファイルに移動します。/cgroups/memory/vbox/taskscgclassifyecho

関連情報