(2010/11/02 更新) lxc ツールキットを使った実験の時はメモリ制限が働いていたと書いてましたが,修正前の例だと働いてませんでした(実験ミス ;_;)."lxc.cgroup.memory.memsw.limit_in_bytes" の記述を追加しました.
前回 は,lxc ツールキットを使っても,libvirt を使っても,/proc/meminfo の値が親環境と同じ値で,制限値でないというのを確認しました.そこで
念のため,親環境の /cgroup/debian/memory.limit_in_bytes ファイルを見ると 536870912 となっていたので,制限はかかっているようです (実際にメモリ使いまくっては確認してませんが).
と書いてましたが,これを確認してみました.(うっかりしてましたが,この cgroup ファイルシステムの中身を確認したのは lxc ツールキットを使ったときだけだったみたいです)
確認は,コンテナを起動して,malloc してメモリ確保した後,エラーが出るまで memset をし続けるだけのプログラムを実行してます.
lxc ツールキットを使った場合
lxc.cgroup.memory.limit_in_bytes = 128M lxc.cgroup.memory.memsw.limit_in_bytes = 128M
こんな感じで設定して,普通に
lxc-start -n debian
という風に起動した後,プログラムを動かしたら,126MB 程度 memset した時点でプログラムは終了しました.制限はちゃんと働いているようです (当たり前).
これだと libvirt と同じ条件でもないので,念のため lxc に付属のサンプルを使って
lxc.utsname = alpha lxc.network.type = vlan lxc.network.vlan.id = 1234 lxc.network.flags = up lxc.network.link = eth0 lxc.network.hwaddr = 4a:49:43:49:79:bd lxc.cgroup.memory.limit_in_bytes = 128M lxc.cgroup.memory.memsw.limit_in_bytes = 128M
みたいな設定ファイルを作成し,
root@plamo001:~# lxc-execute -n test -f lxc-vlan.conf /bin/bash root@alpha:~# ps PID TTY TIME CMD 1 pts/0 00:00:01 lxc-init 2 pts/0 00:00:00 bash 6 pts/0 00:00:00 ps
という風にコンテナが起動させ,コンテナで起動していることを確認した後,memset しまくると,無事 126M 付近でプログラムはエラー終了しました.
この時,/proc なんかは 前回同様に親環境の値を表示しています.
root@alpha:~# free -m total used free shared buffers cached Mem: 1003 70 932 0 7 37 -/+ buffers/cache: 25 977 Swap: 0 0 0 root@alpha:~# cat /proc/meminfo | grep MemTotal MemTotal: 1027356 kB